PowerShell Start-Job 不创建或修改文件
PowerShell Start-Job not creating or amending files
我是 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
我是 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