我有一個包含服務器的列表,每行一個,象文本文件:Powershell的:通過在多行txt文件值作爲PARAM語句陣列
SERVER1
SERVER2
SERVER3
當我在文件上一個Get-Content
,我也看到輸出爲:
SERVER1
SERVER2
SERVER3
所以,現在我寫,我想在多臺服務器作爲陣列的功能,並反覆在功能陣列上。這個功能目前是這樣的:
function Get-LocalAdministrators
{
param(
[Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
[string[]]$computers
)
foreach ($computername in $computers)
{
$ADMINS = get-wmiobject -computername $computername -query "select * from win32_groupuser where GroupComponent=""Win32_Group.Domain='$computername',Name='administrators'""" | % {$_.partcomponent}
foreach ($ADMIN in $ADMINS)
{
$admin = $admin.replace("\\$computername\root\cimv2:Win32_UserAccount.Domain=","") # trims the results for a user
$admin = $admin.replace("\\$computername\root\cimv2:Win32_Group.Domain=","") # trims the results for a group
$admin = $admin.replace('",Name="',"\")
$admin = $admin.REPLACE("""","") # strips the last "
$objOutput = New-Object PSObject -Property @{
Machinename = $($computername)
Fullname = ($admin)
#DomainName =$admin.split("\")[0]
#UserName = $admin.split("\")[1]
}
[email protected]($objOutput)
}
return $objReport
}
}
然後我打算調用該函數爲:
Get-Content 「C:\temp\computers.txt」 | Get-LocalAdministrators
然而,當我運行的功能,我可以看到,$計算機值爲{SERVER3}
(即只有文件中的最後一行)。我試圖通過Google找到答案,儘管有很多數組引用/示例,但是我無法找到一個結合讀取文件中的值的地方, param
聲明中的數組。請原諒我的PS newb無知,並提供我需要的線索......謝謝。
UPDATE:鏈接截圖腳本PowerGUI腳本編輯器運行顯示運行過程中的$電腦的價值:debug run screenshot
感謝您的信息,但這仍然不能解決'$ computers'只有一個值(最後一行)來自'Get-Content'的管道的問題......函數確實運行,但只給出了文件中最後一個服務器的輸出...我假設因爲$計算機只有一個值。如何從文件中傳入多個值(行),以便'$ computers'具有多個值? –
** Get-Content **將所有行讀入數組中,其中每個元素都是一行。 ** $ computers **應該具有與文件中行數一樣多的值。我的猜測是你每次都使用輸出文件並覆蓋它,所以最終你只能得到最終迭代的結果。如果你發佈整個功能,這將有所幫助。 –
你沒有顯示你如何做你的輸出。 '$ computers' * does *擁有所有的值(我自己運行這個代碼),如果你用'$ computer'替換'$ admins'行,你會看到所有3個名字的輸出。這導致我得出這樣的結論,即在輸出中有某些東西沒有向我們展示導致您的問題 - 即「(..)」部分。 – alroc