2016-11-29 49 views
0
function UpdateCSV 
{ 
param(
     [Parameter(Mandatory=$true)]$path, 
     [Parameter(Mandatory=$true)]$Row, 
     [Parameter(Mandatory=$true)]$exportpath, 
     [Parameter(Mandatory=$true)]$Delimiter 
    ) 
try{$csv = import-csv "$path" -Delimiter $Delimiter | Select-Object *,@{ Name= 'Department' ; Expression= {'Unkown'} }, 
                     @{ Name='Office' ; Expression= {'Unkown'} }, 
                     @{ Name= 'ADStatus' ; Expression= {'Unkown'} } 
    } 
catch{break} 


$result = foreach($user in $csv){ 
    $userrow = $user.$row 
    write-host "$userrow" 
    $Username = $userrow.trim() 
    $ADUser = get-aduser -Filter {name -like $Username -or CN -like $Username -or sAMAccountType -like $Username} -Properties * -ErrorAction SilentlyContinue 

if(!$ADUser){ 
    $user.Department = "No ADUser" 
    $user.Office = "No ADUser" 
    $user.ADStatus = "No ADUser" 
    } 


else{ 
    $user.$row = $Username 
     if($ADUser.department -gt $null){$user.Department = $ADUser.department} 
     else{$user.Department = "Empty"} 
     if($ADUser.office -gt $null){$user.office = $ADUser.office} 
     else{$user.Office = "Empty"} 
    $user.ADStatus = $ADUser.enabled 

} 
$user 

} 
$result | export-csv "$exportpath" -Delimiter ";" -ErrorAction Stop 

} 

我所試圖做的是讓一個參數引用在那裏我的用戶名的行的名字,但是當我的用戶"$user.$row"它不工作,在write-host部分寫入了整列,而不只是行我$row如何使用一個變量來調用行的名稱在導入的CSV

指定但是,如果我不是硬編碼$userrow = "$user.example"它直接與在write-host部分只寫出來的那個值,而不是所有的列

所以問題是我如何調用一個行,我有一個變量的名稱。

這是第一次寫東西會被別人比我可以使用,所以請別指出,如果有一些明顯的misstakes

回答

1

我想你要找的是$ _。columnheading

當您import-csv並對其進行管道操作時,列標題就是該值的名稱。 如果您將每一行想象爲對象,並將每一列標題想象爲對象的值。當你import-csv時,每個對象都被單獨傳送。

$ _是已通過管道傳輸的當前對象。因此:

$_.department or $_.name etc. will have the value you are looking for. 

我希望這是有道理的,並回答你的問題。

謝謝,Tim。

更新之後備註

try{$csv = import-csv "$path" -Delimiter $Delimiter | Select-Object *,@{ Name= 'Department' ; Expression= {'Unkown'} }, 
                    @{ Name='Office' ; Expression= {'Unkown'} }, 
                    @{ Name= 'ADStatus' ; Expression= {'Unkown'} } 
                    @{ Name= 'User' ; Expression= {$_.columnheadingforusercolumn} 
} 


$result = foreach($user in $csv){ 
    $userrow = $user.user 
    write-host "$userrow" 
} 
+0

不知道我遵循此處,在try塊代碼正在按excpted。 我很努力在foreach循環中調用$ user。$ row。這是因爲我無法預測$行的名稱,因爲它會與我們審計的每個系統不同 – Jakodns

+0

在您的try塊中,可以使用需要匹配名稱的表達式。如果您添加名稱='用戶';表達式= {$ _。columnnameforuser}到你的散列表,你的用戶標題將永遠是相同的。 當您的CSV更改時,您需要更新哈希表及其表達式以收集正確的數據。之後的一切應該能夠保持不變。例如$ userrow = $ user.user等 –

+0

我添加的列正在作爲例外,我可以作爲例外調用它們。這是我要求用戶在我無法調用的$ row變量中命名的列。 我添加的三行我沒有任何問題,我有一個問題的行是已經在CSV中,因爲我不知道名稱,因此我需要用戶$ user。$ row 。如果我誤解了你,你能否展示一下它的工作原理? – Jakodns

相關問題