我有一个简单的 Powershell 脚本(ps1 文件),它可以清除现有文件的内容,然后将服务的日期和状态附加到该文件:
Clear-Content \\MyDomain\Homes\Usr\MyUser\"Mijn Documenten"\Desktop\ScriptOutput\test.txt
Get-Date -Format "yyyy-MM-dd HH:mm:ss" | Out-File -encoding ascii \\MyDomain\Homes\Usr\MyUser\"Mijn Documenten"\Desktop\ScriptOutput\test.txt -NoNewline
" : " | Out-File -encoding ascii \\MyDomain\Homes\Usr\MyUser\"Mijn Documenten"\Desktop\ScriptOutput\test.txt -NoNewline -append
(Get-Service MyService).status | Out-File -encoding ascii \\MyDomain\Homes\Usr\MyUser\"Mijn Documenten"\Desktop\ScriptOutput\test.txt -NoNewline -append
执行此脚本时(右键单击 -> 使用 Powershell 运行),文件夹脚本输出我的桌面上有这个文件测试.txt内容如下:
2021-12-22 11:41:54 : Running
当我尝试使用任务计划程序每 5 分钟安排一次此任务时,我可以看到 Powershell 窗口每 5 分钟弹出一瞬间,但文件 (test.txt) 未填充最新数据。我希望每次执行脚本时都有不同的时间戳。
该任务的属性为:
一般的
触发(每日)(每 5 分钟)
操作
其中程序/脚本:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
和参数:
-File C:\Scripts\FNMS Scripts\Beacon Server Service Logging Script\beaconscript_v1.0.ps1
为什么脚本不会执行并使用最新的时间戳更新 test.txt?
答案1
发生这种情况是因为Window 的执行策略,默认情况下不允许运行未签名的脚本。您需要更改此策略才能使脚本正常运行。
- 打开提升的 Powershell 提示符。
- 键入
Set-ExecutionPolicy Unrestricted
以将策略设置为“不受限制”。 - 键入
Get-ExecutionPolicy
以验证执行策略的当前设置。
请注意,更改此设置会带来安全威胁,因为其他程序也可以运行恶意脚本。您可以尝试编写同一脚本的批处理脚本分支,然后使用它来代替此脚本。Windows 执行策略不会阻止批处理脚本。