我一直在關注這個 Microsoft 檔案https://docs.microsoft.com/en-us/powershell/module/exchange/search-unifiedauditlog?view=exchange-ps我正在嘗試撰寫一個 PowerShell 腳本來下載審計日志。到目前為止一切順利,但我只是想知道如何從我的 csv 檔案中讀取用戶 ID,而不是直接在我的腳本中使用用戶 ID?
這就是我的 CSV 檔案現在的樣子。
C:\AuditLogSearch\Reference\User.csv
Name Email Id
................................
1. Ronaldo [email protected] KLIEKN
2. Messi [email protected] LEK89K
3. LeBron [email protected] IKNLM9
我在腳本中進行了這樣的硬編碼,它運行良好,但是
$Global:user = "KLIEKN", "LEK89K", "IKNLM9",
Search-UnifiedAuditLog -SessionId $sessionID -SessionCommand ReturnLargeSet -UserIds $user
我認為這不是個好主意,所以我嘗試像這樣從我的 CSV 檔案中讀取它
$Global:userPath = "C:\AuditLogSearch\Reference\User.csv"
function Log-Search {
Import-Csv $userPath | ForEach-Object -Property @{
$userId = $($_.Id)
}
Search-UnifiedAuditLog -SessionId $sessionID -SessionCommand ReturnLargeSet -UserIds $userId
}
但我收到了這個錯誤
A null key is not allowed in a hash literal.
我將不勝感激任何幫助或建議。
uj5u.com熱心網友回復:
{}定義了一個[ScriptBlock]——這是你傳遞給要為每個元素呼叫的ForEach-Objectcmdlet 的內容——而@{}定義了一個[Hashtable]. $userId是$null因為你沒有賦值,所以你有...
@{
$userId = $($_.Id)
}
...您正在嘗試[Hashtable]使用鍵為 的元素定義 a $null,因此出現錯誤。
也沒有這樣的-Property引數ForEach-Object,所以當你洗掉 " -Property @" 時,你最終會得到一個有效的腳本......
Import-Csv $userPath | ForEach-Object {
$userId = $($_.Id)
}
這是讀取您的 CSV 檔案,但尚未將資料傳遞給您的Search-UnifiedAuditLog呼叫。有多種方法可以檢索Id每個 CSV 記錄的欄位,但從前一個片段中最短的轉換是...
Import-Csv $userPath | ForEach-Object {
$_.Id
}
...可以使用-MemberName引數重寫...
Import-Csv $userPath | ForEach-Object -MemberName Id
...然后剩下的就是將管道結果存盤在$userId...
$userId = Import-Csv $userPath | ForEach-Object -MemberName Id
順便說一句,您發布的 CSV 資料無法通過Import-Csv. 如果可能,請保存沒有第二行的資料,并使用逗號或制表符作為分隔符(后者用 讀取Import-Csv ... -Delimiter "`t");否則,腳本在讀取資料之前必須進行一些操作。
uj5u.com熱心網友回復:
試試這個吧?
$userId=@()
Import-Csv $userPath | ForEach-Object {
$userId = $_.Id
}
或者
$userId = Import-Csv $userPath | Select-Object -ExpandProperty Id
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/374223.html
標籤:电源外壳 文件 powershell-2.0 审计
