更新
我能够通过在过程中更改并仅更改名称来解决此问题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"
}