2011-03-10 59 views
2

我遇到了我的代碼問題。我想列出隱藏和非隱藏的股票。我必須使用if/else結構來做到這一點。我的問題似乎在$ HiddenShares和$ NonHiddenShares陣列。我希望名單上的股票標題是隱藏股票和非隱藏股票,每股股票分開。Powershell程序問題

例子:

Hiddden股份

影片$

音樂$

非隱藏共享

電視$

照片$

這裏是我的代碼:

$Shares = Get-WmiObject Win32_Share 

$HiddenShares ="" 

$NonHiddenShares ="" 

Foreach($_ in $Shares) 

{ 

    If($_ | Where-Object {$_.Name -like "*$"}) 

     { 
     $HiddenShares += $_.Name 
    } 
    Else 
    { 
     $NonHiddenShares += $_.Name 
    } 
} 
Write-Host "Hidden Shares" 

Write-Host $HiddenShares 

Write-Host "Non-hidden Shares" 

Write-Host $NonHiddenShares 

回答

3

,我們在您的示例代碼多個問題。 $ _是一個自動變量。要使用正確的方法是:

$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)」。

此外,insdie 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    {}  
+0

太謝謝你了。 = D你的幫助很大。 – 2011-03-10 03:48:13