我正在尝试制作一个 powershell 脚本来创建计划任务以按需运行命令。以下是我迄今为止的代码。
$taskName = "TestTask"
$taskPath = "<taskdir>"
$user = "$env:USERDOMAIN\$env:USERNAME"
$response = Read-host "What's your password?" -AsSecureString
$password=[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($response))
$action = New-ScheduledTaskAction -Execute "task.cmd"
$settings = New-ScheduledTaskSettingsSet -Compatibility WIN8
$principal = New-ScheduledTaskPrincipal -UserId Administrator -LogonType S4U -RunLevel Highest
$inputObject = New-ScheduledTask -Action $action -Principal $principal - Settings $settings
Register-ScheduledTask -TaskName $taskName -taskpath $taskPath -InputObject $inputObject -user $user -password $Password
这对于设置任务来说效果很好,我唯一想要的就是能够从管理组中的任何用户运行该任务,而管理员(任务运行的身份)未登录并且我不希望来存储密码。当我通过 GUI 设置任务时,无论用户是否登录,我都可以选择运行按钮来运行上述代码实现的功能。但它不会选中表示不存储密码的框。当我在 powershell 中运行以下命令来查看创建的任务的属性时,输出如下
get-scheduledtask testtask | select -ExpandProperty principal
DisplayName :
GroupId :
Id : Author
LogonType : Password
RunLevel : Highest
UserId : WIN-REH2TQO7H7S\Administrator
ProcessTokenSidType : Default
RequiredPrivilege :
PSComputerName :
如果我在通过 GUI 创建的任务上运行相同的命令,并且不保存密码检查,我会得到以下信息
get-scheduledtask testtask | select -ExpandProperty principal
DisplayName :
GroupId :
Id : Author
LogonType : S4U
RunLevel : Highest
UserId : WIN-REH2TQO7H7S\Administrator
ProcessTokenSidType : Default
RequiredPrivilege :
PSComputerName :
我发现的唯一区别是登录类型是 S4U 与密码。所以在我的powershell中我添加了
$principal = New-ScheduledTaskPrincipal -UserId Administrator -LogonType S4U -RunLevel Highest
但即使在代码中将 LogonType 设置为 S4U,它在创建它时仍然将其设置为密码。我可以进入 GUI 并在 powershell 代码运行后物理更改任务,并选中该框,此时它设置正确。但有谁知道为什么代码不能做到这一点?或者如果我错过了什么?
感谢您的任何帮助,您可以提供,
Mack.