前提・実現したいこと
デスクトップのショートカットのリンク先(参照先)を変更したいと思っております。
条件としては、リンク先(参照先)に"\123.456.78.9"があれば "\123.456.78.8"に置き換える、変更するというものです。
エラーの内容からコードに原因等ございますでしょうか。。
発生している問題・エラーメッセージ
New-Object : 引数 'System.Object[]' を受け入れる位置指定パラメーターが見つかりません。 発生場所 行:1 文字:12 + $wsShell = New-Object -ComObject WScript.Shell $shortcuts | ForEach-O ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [New-Object]、ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.NewObjectCommand
該当のソースコード
##### # デスクトップ、およびデスクトップ上のフォルダ内の # ショートカットファイルの参照先を書き換える ##### ## レガシーな環境用の共有フォルダパス文字列を新しい環境用に置き換えるfuntion function ReplacePath([string] $path) { # 例1:\192.0.2.1\share1\~ → \file1.example.jp\share1\~ $path = $path -ireplace "\123.456.78.9\", "\123.456.78.8\" Return $path } # メイン処理 Write-Output "デスクトップ上のショートカットの更新を開始します。" $desktop = [System.Environment]::GetFolderPath('Desktop') $shortcuts = Get-ChildItem $desktop *.lnk -Recurse # PowerShellにショートカットを編集できるコマンドレットは無い。WSHを使う。 $wsShell = New-Object -ComObject WScript.Shell $shortcuts | ForEach-Object { # 更新の必要があるショートカットファイルなのかを確認 $link = $wsShell.CreateShortcut($_.FullName) $newTargetPath = ReplacePath($link.TargetPath) if ($newTargetPath -eq $link.TargetPath){ Write-Output ("置き換えの必要なし: " + $_.FullName) return } # ショートカットの参照先と作業フォルダーを更新 $link.TargetPath = $newTargetPath $link.WorkingDirectory = ReplacePath($link.WorkingDirectory) $link.Save(); Write-Output ("置き換えを実行: " + $_.FullName) } Write-Output "デスクトップ上のショートカットの更新が完了しました。"
回答1件
あなたの回答
tips
プレビュー