我正在尝试获取文件服务器上共享的文件夹列表,并将它们放入数组中。这是我目前拥有的代码:
$FileServer = "ServerName"
[array]$FileServerShares = gwmi win32_Share -ComputerName $FileServer |
Where-Object {$_.type -eq '0'} |
Where {$_.name -notlike "*$*"}
Write-Host $FileServerShares
这将输出共享的文件夹(也不包括 $ 共享),但输出将它们全部放入一行上的一个长变量中。
我如何将其放入一个数组中并且每条记录占一行?
更新:
对于那些感兴趣的人,我使用了可接受的答案,效果很好。我实际上是在寻找每个文件夹的“名称”实例,因此使用了如下代码:
$FileServer = "ServerName"
$FileServerSharesFullName = gwmi win32_Share -ComputerName $FileServer |
Where-Object {$_.type -eq '0'} |
Where {$_.name -notlike "*$*"} # This excludes the "dollar shares" from being selected
$FileServerShares = $FileServerSharesFullName.name | % {$_.ToString()}
因此,现在共享的每个文件夹的名称都位于 $FileServerShares 中的数组中。
答案1
$FileServerShares
已经是一个数组(即使没有[array]
说明符):
PS> $FileServerShares.getType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
出于某种原因,当共享对象数组转换为字符串时,每个共享都放在同一行。我不知道为什么会这样,但你可以将共享对象转换为字符串,这样你就有了一个字符串数组。字符串数组确实会转换为多行字符串。
$FileServer = "ServerName"
$FileServerShares = gwmi win32_Share -ComputerName $FileServer |
Where-Object {$_.type -eq '0'} |
Where {$_.name -notlike "*$*"} |
% { $_.ToString() }
Write-Host $FileServerShares