アップデート
Rename-Itemプロセスで名前を変更して変更するだけで、これを解決できましMove-Itemた(これは、物事が実際に機能するためのばかげた方法です)。ただし、これはreturnステートメントが実行されなかった理由、または少なくとも実行された場合、関数が を呼び出し続けた理由の謎を解決しませんNew-Item。
ログオン時にアイテムの名前を変更しようとしていますが、アイテムが存在しない場合は作成したいと考えています。これを行う関数は次のとおりです。
function SelfHelpAppData {
$ErrorActionPreference = "Stop"
trap {Log-Error $_ $MyInvocation.MyCommand; Continue}
$files = Get-ChildItem $AppData
ForEach ($file in $files) {
If ($file.Name -match 'qxjz') {
Rename-Item $file.PSPath "qxjz$env:COMPUTERNAME.txt" -Force
WriteLogonEntryData
return
}
}
New-Item "$AppData\qxjz$env:COMPUTERNAME.txt"
WriteLogonEntryData
}
ただし、これを実行すると、ログに次のエラーが表示されます。
Windows PowerShell は非対話型モードです。読み取りおよびプロンプト機能は使用できません。
\DC1\NETLOGON\PSSubs\mainlogon.ps1:841 char:5 + New-Item "$AppData\qxjz$env:COMPUTERNAME.txt" + ~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
その後:
ファイルが既に存在する場合、ファイルを作成できません。
\DC1\NETLOGON\PSSubs\mainlogon.ps1:835 char:13 + Rename-Item $file.PSPath "qxjz$env:COMPUTERNAME.txt" -Force + ~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
しかし、最初の行 (rename-item) を実行しようとした場合、他の行がチャンスを得る前に関数が返されているはずなので、これは不可能です。returnステートメントをに変更しようとしましreturn $nullたが、効果はありません。ここで何が起こっているか知っている人はいますか?
ありがとうございました
ログエラーコードは次のとおりです。
function Log-Error {
param (
$error,
[string]$sub
)
$ErrorActionPreference = "Stop"
trap {Log-Error $_ $MyInvocation.MyCommand; Continue}
$filename = "\\file\administration\Unused\LogonScriptErrors\$env:USERNAME - $env:COMPUTERNAME - $(Get-Date -Format ddMMyyyy-HHmmss) - $($error.InvocationInfo.ScriptLineNumber).log"
New-Item $filename -ItemType File -Value "$($error.Exception.Message) `r`n `r`n $($error.InvocationInfo.PositionMessage) `r`n `r`n $sub"
}