私はpowershellを初めて使用しています。現在、コンピュータにログインしているユーザーを比較するために、ExcelファイルからCSVを作成しようとしています。しかし、私は奇妙な問題に遭遇しています。奇妙な問題は、コンピュータにログインしていなくても、スクリプトが同じユーザを何度も引きつけることがあります。ここに私のフルコードです。私はできることができる多くの最適化があることを知っています(そしてそれらは削除される必要があります、それらは留意すべきです)。私はGet-WMIObjectやそれに類するものを悪用したと仮定しています。あなたがGet-ADUser -Identity $null
を実行しようとしたので、ログインしていなくてもWMIが現在のユーザーを引き出します
$csvRunFile = "test.csv"
$output = "Results_$(Get-Date -format yyyy.MM.dd).csv"
#Import the created csv.
$csv = import-csv $CsvRunFile
$results = foreach($csv_line in $csv) {
$ctag = $csv_line.ctag
$test_ping = test-connection $ctag -Count 1 -Quiet
#If the computer is pingable (IE: Online)
switch ($test_ping) {
$true {
#Pull the actual logged in user.
$Username = (Get-WmiObject -ComputerName $ctag -Class Win32_ComputerSystem).Username.Split("\\")[1]
#If the last modified folder is 'public' put an error, otherwise pull the username's information from AD.
#This was from when it pulled from the \User folder rather than the last log in, this is probably removeable.
if ($Username -eq "Public") {
$ADName = "No User"
} else {
$ADName = Get-ADUser -Identity $Username
$ADName = $ADName.Name
} #end If
}#end Switch:True
#Show there was an error when pinging the computer.
$false {$ADName = "ERROR"}
}#end Switch
#write the results the new output CSV.
$result = [PSCustomObject]@{
CTAG = $ctag
Username = $ADName
}#end PSCustom Object
$result
} #end foreach
#Turn the .txt into a CSV so it can be manually compared to the list in the original excel file.
$results | Export-Csv -path $output
私は、更新されたコードを使用しました、そして、それは同じことを行います。私はループの終わりに変数をクリアしようとすると、変数をクリアしようとしましたが、エラーがスローされました。変数内の値をクリアしようとしているようです。問題。しかし、シートを見ると、それは問題であるように見えますが、$ null値を引き出すのではなく、定義された前の$ユーザー名を繰り返すだけです。 –
更新された答えを試してください。これは、あなたのコードで "null値の呼び出しメソッド"を処理した以外の最後のものと同じように動作します。それが動作しない場合は、私はそれを再現することはできませんので、あなたが実際に間違った値の1つを持っているときにスクリプトにブレークポイントを追加し、それをデバッグする必要があります。 –
それは、変数が実際に変数をクリアしていないように見えますが、あなたのものが働いています(これは、あなたが使ったget-wmiの余分なビットです。 –