В вашем примере кода есть несколько проблем.$ _ - это автоматическая переменная.Правильный способ использования:
$shares | ForEach-Object {
if ($_.Name -like "*$") {
#Do Something
} else {
#Do something else
}
}
или
foreach ($share in $shares) {
if ($share.Name -like "*$") {
#Do Something
} else {
#Do Something else
}
}
Делая что-то вроде $HiddenShares += $_.Name
, вы на самом деле объединяете строки.Очень грязный способ исправить это: $ HiddenShares + = "` n $ ($ _. Name) ".
Кроме того, в операторе if вы можете напрямую получить свойство.Вам не нужно использовать Where-Object
.
Итак, ваш код будет выглядеть так:
$Shares = Get-WmiObject Win32_Share
$HiddenShares =""
$NonHiddenShares =""
Foreach($share in $Shares)
{
If($share.Name -like "*$")
{
$HiddenShares += "`n$($share.Name)"
}
Else
{
$NonHiddenShares += "`n$($share.Name)"
}
}
Write-Host "Hidden Shares"
Write-Host $HiddenShares
Write-Host "`nNon-hidden Shares"
Write-Host $NonHiddenShares
Другое решение может быть:
$shares = Get-WmiObject Win32_Share
$objShares = @{}
$hiddenShares = @()
$nonHiddenShares = @()
$shares | ForEach-Object {
if ($_.Name -like "*$") {
$hiddenShares += $_.Name
} else {
$nonHiddenShares += $_.Name
}
}
$objShares.Add("Hidden Shares",$hiddenShares)
$objShares.Add("Non-hidden Shares",$nonHiddenShares)
$objShares
Это вернет что-токак:
Name Value
---- -----
Hidden Shares {ADMIN$, C$, IPC$}
Non-hidden Shares {}