PowerShell

powershellの実行結果をエクセルに出力

More than 1 year has passed since last update.

したいこと:
ショートカットのリンク先変更
以前の投稿より改善箇所が多いので改めて投稿

コメント:
いろいろな方のいいところの全部乗せ。
リンク先の書き換えができなかったときにそなえ、
もともとのリンク先をエクセルに落とし込みたかった。
エクセルの1列目にショートカットの名前、
2列目にリンク先が出力されます。

$$特殊フォルダとしてデスクトップを取得
$path=[system.environment]::getfolderpath([system.environment+specialfolder]::desktop)
cd $path

$$ファイルオブジェクトの生成
$wsh=New-Object -ComObject wscript.shell
$fnames=Get-ChildItem -Recurse -Include *.lnk

$$エクセルのオブジェクト生成
$excel=New-Object -ComObject excel.application
$excel.visible=$false
$wb=$excel.workbooks.add()
$sheet=$excel.worksheets.item(1)
$i=2 #エクセルファイルの2行目から書き込み

$$ショートカットをひとつひとつ処理する
foreach($fname in $fnames){
$sht=$wsh.createshortcut($fname)
$fnamefull=$sht.fullname
$link_name=$sht.targetpath
$sheet.cells.item(1,1)="ショートカットの名前"
$sheet.cells.item(1,2)="リンク先"
$sheet.cells.item($i,1)=$fnamefull
$sheet.cells.item($i,2)=$link_name
$i++
$str=$link_name.split("\")
$str.length

$$リンク先の判別。リンク先を¥で分割して配列にして対応
if($str[1] -match "Users"){
$変更したいリンク先と入れ替え
$str[1]="dell"
$new_path=$str -join "\"
$sht=$wsh.createshortcut($fnamefull)
$sht.targetpath=$new_path
$sht.save()
}else{
}
}

$$エクセルの列幅を文字にあわせる
$null = $sheet.Columns.AutoFit()
$wb.saveas($path + "\" + "recult.xlsx")
$excel.quit()
$excel=$null
$wsh.popup("完了しました。")