PowerShell 启动作业未创建或修改文件



我是PowerShell的新手,这是我第一次尝试使用作业。 我遇到了一个问题,我有一个脚本的一部分来查找文件,如果它不存在,则创建它,然后修改文件,当我运行脚本(不是作为作业(时,它正确执行,但是当我把它放在作业中时,它不会修改文件。

我所拥有的一个更简单的例子是这样的:

Start-job -Name HostCheck -ScriptBlock {
     ForEach ($Host in (Get-Content -Path .HostFile.txt) {
          Add-Content .somefile.txt "`nWrite something on a new line for $Host"
     } | Out-Null
} 
# Removes job once it is finished
Get-Job -Name HostCheck | Wait-Job | Remove-Job

现在我尝试在| Out-Null后添加| Receive-Job,但这似乎并没有改变任何东西。

我见过人们将整个脚本块写入变量并仅使用该变量,所以我很好奇这是否是一种要求(但我不会这么认为(。

此外,这可能很重要,我使用.bat文件打开脚本,该文件将 PowerShell 控制台升级到管理员,并将进程的执行策略设置为绕过。 现在似乎在该控制台会话中运行或由该控制台会话启动的所有内容(运行了几个脚本,这只是其中一个脚本的一部分(似乎继承了这些设置,但是作为作业的新手,我不知道它是否也会继承这些设置,或者我将如何强制它(如果没有(。

我发现了这个问题:

-启动作业时,您当前的工作目录会丢失,因此我的相对路径.somefile.txt默认为C:Users[Username]Documents而不是.somefile.txt所在的位置。

我可以通过使用绝对路径来解决这个问题,或者我认为有一种方法可以将参数传递给工作,但如果有人知道更好的方法来做到这一点,请随时发表评论。

这是一个解决方法,cd 到调用方的当前目录。

start-job { cd $using:pwd; pwd } | Receive-Job -wait -auto

最新更新