Powershell计划问题

时间:2011-03-10 03:13:09

标签: powershell powershell-v2.0

我的代码存在问题。我想列出隐藏和非隐藏的股票。我必须使用if / else结构。我的问题似乎是在$ HiddenShares和$ NonHiddenShares数组中。我希望清单上有标题隐藏股票和非隐藏股票,然后是股票,每股股票都在一条单独的行上。

示例:

Hiddden Shares

画$

音乐$

非隐藏股份

电视$

照片$

这是我的代码:

$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

1 个答案:

答案 0 :(得分: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 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              {}