2016-11-29 7 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

-csvをインポートしてパイプすると、列見出しが値の名前になります。 各行をオブジェクトとして、各列の見出しをオブジェクトの値として想像してみましょう。 import-csvを実行すると、各オブジェクトは個別にパイプされます。

$ _は、パイプされた現在のオブジェクトです。したがって:

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

私はこれが意味を持ち、あなたの質問に答えることを望みます。

ありがとう、ティム。コメント

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

ない私はexcptedとしてtryブロック内のコードが動作している、ここに従ってください後に更新

。 foreachループで$ user。$ rowを呼び出すのに苦労します。これは私が$行の名前を予測することはできません。なぜなら、監査する各システムからは異なるからです。 – Jakodns

+0

あなたのtryブロックでは、名前を照合するのに必要な式を使用することができます。 Name = 'User'を追加した場合。 Expression = {$ _。columnnameforuser}をハッシュテーブルに追加すると、ユーザーのタイトルは常に同じになります。 CSVが変更された場合、正しいデータを収集するためにハッシュテーブルとその式を更新する必要があります。それ以降はすべて同じままでいなければなりません。たとえば$ userrow = $ user.userなど –

+0

私が追加した列は例外として動作しており、私は例外としてそれらを呼び出すことができます。それは、私が呼び出すことができない$ row変数に名前を付けるようにユーザーに依頼する列です。 3行追加する問題はありません。問題がある行は、CSVに既に含まれている行です。名前がわからないため、$ userというユーザーが必要です。 。もし私があなたのことを忘れていたら、それがどのように働くかのスニペットを見せることができますか? – Jakodns

関連する問題