2017-06-14 166 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