次のようなサーバーのリストを 1 行に 1 つずつ含むテキスト ファイルがあります。
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]
}
$objReport+=@($objOutput)
}
return $objReport
}
}
次に、関数を次のように呼び出す予定です。
Get-Content “C:\temp\computers.txt” | Get-LocalAdministrators
ただし、関数を実行すると、$computers の値が{SERVER3}
(つまり、ファイルの最後の行のみ) であることがわかります。Google を介してこれに対する答えを見つけようとしましたが、多くの配列がありますが、参照/例、ファイルからの値の読み取りをparam
ステートメントの配列に組み合わせたものを見つけることができません。私のPS初心者の無知を許してください、そして私が必要とする手がかりを提供してください...ありがとう。
更新: 実行中の $computers の値を示す PowerGUI スクリプト エディターで実行されているスクリプトのスクリーンショットへのリンク:デバッグ実行スクリーンショット