実現したいこと
Get-ADComputerを使って複数のコンピューターの情報を取得したいと考えています。
Get-ADComputer -Filter 'Name -eq "変数名"' | Select-Object {$_.name, $_.DistinguishedName}
とするとエラーが出てしまうので解決したいです。
書いたコード
CSVに書かれているコンピューター名をImport-Csvで取得しそれを-Filter Name -eqにいれることで、取得した全てのコンピューターの情報を得ようとしています。
#ps1ファイル実行時の引数(ファイル名)を見ている Param( $Arg1 = ".\hogeCSV.csv" ) #CSVファイルからコンピューター名を取得 $computers = Import-Csv $Arg1 -Encoding UTF8 #取得したコンピューター名でフィルターをかけてそのコンピューターの情報を得ようとしている Get-ADComputer -Filter 'Name -eq """$computers"""' | Select-Object {$_.name, $_.DistinguishedName}
発生している問題・エラーメッセージ
Get-ADComputer : クエリ解析エラー: 'Name -eq """$computers"""' エラーメッセージ: 'syntax error' 場所: '12'。 + Get-ADComputer -Filter 'Name -eq """$computers"""' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +CategoryInfo : ParserError: (:) [Get-ADComputer], ADFilterParsingException +FullQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADFilterParsingException,Microsoft.ActiveDirectory.Management.Commands.GetADComputer
試したこと
$computers = cat -Encoding UTF8 -Arg1
として取得したデータを文字列として取り入れてみたり、それをForeach文で回してみたりしましたがいずれも思うような結果は得られませんでした。
補足情報(FW/ツールのバージョンなど)
できるだけの情報は書きましたが、必要な実行結果などありましたらよろしくお願いします。
Get-ADComputer -Filter * | Where-Object {$computers -eq $_.Name} | Select-Object Name,DistinguishedName で動作しますか?
特にエラーは出なかったのですが、実行結果も出ませんでした;;
Write-host $computers を実行すると何か表示しますか?
先ほどのGet-ADComputer -Filter * | Where-Object {$computers -eq $_.Name} | Select-Object Name,DistinguishedNameの後にWrite-host $computersを実行したところ、
@{computer_name = aaa} @{computer_name = bbb} @{computer_name = ccc}
と表示されました。
CSVの中身が
"computer_name"
"aaa"
"bbb"
"ccc"
となっているので、それだと思われます。
CSVファイルになっていないようです(カンマ区切りになっていない)ので、
ちょっと強引ですが以下に変更してお試しいただけますか?
$computers = Import-Csv $Arg1 -Encoding UTF8
↓
$computers = @(Get-Content -LiteralPath $Arg1 -Encoding UTF8) -replace '"',''
Import-Csvを使用する場合は以下をお試しください。
$computers = @((Import-Csv $Arg1 -Encoding UTF8 -Header "Title" | Select-Object -skip 1).Title)
CSVファイルの方は盲点でした💦
解決しました。
本当にありがとうございます。

あなたの回答
tips
プレビュー