2017-06-14 193 views
0

當我運行我的代碼時,它給我以下錯誤。 Error 我有代碼做的是採取csv然後篩選名稱列只有管理員,然後我有標題列篩選我提供的所有操作系統。 if語句表示如果列Type0等於域,則在Account0後面的「唯一帳戶名稱」列中輸入Domain0。否則它會將它放入Netbios名稱,然後是Account0。以下是Excel表格。並期望每個輸出。 Excel Sheet Desired output of Unique Account Name如果其他語句Powershell CSV

Import-Csv 'U:\Local Group Members.csv' | where-Object {($_.Name0 -eq "administrators") -and ($_.caption0 -match "Microsoft Windows 10 Enterprise|Microsoft Windows 7 Enterprise|Microsoft Windows 7 Professional|Microsoft Windows 8 Enterprise|Microsoft Windows 8 Pro|Microsoft Windows 8.1 Enterprise|Microsoft Windows 8.1 Pro")} | 
Select-Object "Netbios_name0", "Name0", "Account0","category0","Domain0","Unique Account Name","Type0","caption0", "Excluded" | 
ForEach-Object 

If ($_.Type0 -eq 'Domain') { 
    $_.UniqueAccountName = "$($_.Domain0) - $($_.Account0)" 
} Else { 
    $_.UniqueAccountName = "$($_.Netbios_name0) - $($_.Account0)" 
} 

Export-Csv -notypeinformation U:\LGMbestone.csv 

我是一個PowerShell新手,我卡住了,我怎麼能我得到這個代碼運行?

+0

的可能的複製[if語句PowerShell的CSV(https://stackoverflow.com/questions/44528728/if-statement-csv-powershell) –

+0

這似乎不大可能,多次反覆問同一個問題沒有足夠的細節不會給你一個答案。 –

+0

@Bill_Stewart做這個不比另一個更詳細嗎? – Sprengdilly

回答

1

你不能管道到一個if語句,你將需要通過逐行遍歷結果來修改對象,它需要一個foreach循環。此外,與Export-CSV的管道比使用輸入對象調用管道要好。下面是一個基於你的代碼的例子。希望這可以幫助!

$csv = Import-Csv 'U:\Local Group Members.csv' | 
Where-Object {($_.Name0 -eq "administrators") -and ($_.caption0 -match "Microsoft Windows 10 Enterprise|Microsoft Windows 7 Enterprise|Microsoft Windows 7 Professional|Microsoft Windows 8 Enterprise|Microsoft Windows 8 Pro|Microsoft Windows 8.1 Enterprise|Microsoft Windows 8.1 Pro")} | 
Select-Object "Netbios_name0", "Name0", "Account0","category0","Domain0","Unique Account Name","Type0","caption0", "Excluded" 

#Modify each line based on your parameters 
Foreach ($row in $csv) { 
    If ($row.Type0 -eq 'Domain') { 
     $row."Unique Account Name" = "$($row.Domain0) - $($row.Account0)" 
     Write-Host $row."Unique Account Name" 
    } Else { 
     $row."Unique Account Name" = "$($row.Netbios_name0) - $($row.Account0)" 
    } 
} 

#Export CSV 
$csv | Export-Csv C:\LGMbestone.csv -NoTypeInformation 
+0

我運行該代碼,它運行了所有的我,除非它沒有給我出口csv – Sprengdilly

+0

這似乎工作後,我切換路徑。但現在,該代碼僅適用於「域」部分。 – Sprengdilly

+0

@Sprengdilly嘗試更改'$ row。「唯一帳戶名稱」'到'$ row.UniqueAccountName'。 它必須與CSV中的列名稱匹配,因此如果CSV中沒有空格,請刪除腳本中的空格。讓我知道這是否有幫助。 – deprofundis

0

看起來像一個格式問題。用foreach,應該是這樣的:

$import=Import-Csv 'U:\Local Group Members.csv' | where-Object {($_.Name0 -eq "administrators") -and ($_.caption0 -match "Microsoft Windows 10 Enterprise|Microsoft Windows 7 Enterprise|Microsoft Windows 7 Professional|Microsoft Windows 8 Enterprise|Microsoft Windows 8 Pro|Microsoft Windows 8.1 Enterprise|Microsoft Windows 8.1 Pro")} | 
Select-Object "Netbios_name0", "Name0", "Account0","category0","Domain0","Unique Account Name","Type0","caption0", "Excluded" 

ForEach($imp in $import) 
{ 

    If ($imp.Type0 -eq 'Domain') 
    { 
     $imp.UniqueAccountName = "$($imp.Domain0) - $($imp.Account0)" 
    } 
    Else 
    { 
     $imp.UniqueAccountName = "$($imp.Netbios_name0) - $($imp.Account0)" 
    } 

    Export-Csv "$imp.UniqueAccountName" -notypeinformation "U:\LGMbestone.csv" -Append 
} 

注意:我沒有檢查過import-csv部分。我相信它正確地採取數據,你應該使用foreach循環迭代每一行值

+0

您不能管道到if。 – Matt

+0

錯字:)刪除它 –

+0

@RanadipDutta你可以通過使用foreach循環並迭代每一行值來顯示你的意思嗎? – Sprengdilly