我有以下foreach
塊,它循環顯示Get-ACL
的結果,並將路徑,用戶名,權限等打印爲CSV報告。嵌套的Foreach不會將變量返回?
可變$groups
被另一腳本中定義:
. C:\Powershell\Get-LocalGroup.ps1
$groups = Get-LocalGroup -Computername $computerName
下面是主要的foreach塊:
foreach ($u in $access.Access) {
if ($u.IdentityReference -like "$domain") {
Try {
[String]$uIdent = $u.IdentityReference
$displayName = get-aduser $uIdent.split("\")[1] -Properties DisplayName | Select-Object DisplayName
$user = "$($displayName.DisplayName) ($MUDID)"
}
Catch {
$user = "$($u.IdentityReference) (User not found)"
}
}
elseif ($u.IdentityReference -like "S-*") {
#PROBLEM STARTS HERE
write-host "SID"
foreach ($g in $groups) {
if ($g.SID -like $u.IdentityReference) {
Write-Host $u.IdentityReference
Write-Host $g.SID
Write-Host $g.Name
$userSID = $g.Name
}
else {
$userSID = $u.IdentityReference
}
}
$user = $userSID
Write-Host "User: $user"
}
else {
$user = $u.IdentityReference
}
}
代碼工作幾乎完美,但它似乎拒絕通過以下變量退出foreach:
$userSID = $g.Name
由於您ca n的距離(放置只測試...我發誓)寫主機事件此示例輸出中看到:
SID
S-1-5-21-4175155190-227829953-2793635334-1036
S-1-5-21-4175155190-227829953-2793635334-1036
AUK-PH-Distribution-Depart
User: S-1-5-21-4175155190-227829953-2793635334-1036
我認爲這個問題是作用域,但我從來沒有碰到這一點,所以我不確定如何處理它。任何人都可以指出我在這裏做錯了嗎?
你有沒有試過在foreach之前定義'$ userSID'? '#PROBLEM從這裏開始$ userSID =''' –
不能肯定地說,但我高度懷疑它與第一行一致:if($ u.IdentityReference-like「$ domain」)。類似的運算符做一個通配符匹配,除非你包含一些通配符(例如「$ domain \ *」,它將會完成匹配。 – mjolinor
如果我在foreach之前定義了'$ userSID ='test'',它仍然 –