PowerShell Start-Job未创建或修改文件

问题描述 投票:0回答:2

我是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

现在我已经尝试在| Receive-Job之后添加| Out-Null,但这似乎并没有改变任何内容。

我已经看到人们将整个脚本块写到一个变量中,而只是使用该变量,所以我很好奇这是否是必要条件(但我不这么认为)。

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

powershell jobs
2个回答
0
投票

我发现了问题:

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

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


0
投票

这是一种变通方法,cd到调用者的当前目录。

start-job { cd $using:pwd; pwd } | Receive-Job -wait -auto
© www.soinside.com 2019 - 2024. All rights reserved.