使用powershell创建计划任务而不存储密码
Create scheduled task with powershell and not store password
我正在尝试制作一个 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
这很适合设置任务,我唯一想要的是能够 运行 管理员组中的任何用户的任务,而管理员(任务是 运行 as) 未登录,我不想存储密码。当我通过 GUI 设置任务时,我可以 select 按钮 运行 无论用户是否登录,上面的代码实现了这一点。但它不会选中表示不存储密码的框。当我 运行 在 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 代码 运行s 之后物理更改任务,然后选中设置正确的框。但是有没有人知道为什么代码不会这样做?或者如果我错过了什么?
感谢您提供的任何帮助,
马克.
我正在寻找类似的东西,使用启用了 'Do not store password' 的本地管理员帐户。你的 post 让我走上了正确的轨道,我的现在可以工作了。
试试这个:
Register-ScheduledTask -TaskName $taskName -taskpath $taskPath -InputObject $inputObject
如果失败,请尝试将主体放入行中并将其从 InputObject 中取出:
Register-ScheduledTask -TaskName $taskName -Action $action -Principal $Principal
我正在尝试制作一个 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
这很适合设置任务,我唯一想要的是能够 运行 管理员组中的任何用户的任务,而管理员(任务是 运行 as) 未登录,我不想存储密码。当我通过 GUI 设置任务时,我可以 select 按钮 运行 无论用户是否登录,上面的代码实现了这一点。但它不会选中表示不存储密码的框。当我 运行 在 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 代码 运行s 之后物理更改任务,然后选中设置正确的框。但是有没有人知道为什么代码不会这样做?或者如果我错过了什么?
感谢您提供的任何帮助,
马克.
我正在寻找类似的东西,使用启用了 'Do not store password' 的本地管理员帐户。你的 post 让我走上了正确的轨道,我的现在可以工作了。
试试这个:
Register-ScheduledTask -TaskName $taskName -taskpath $taskPath -InputObject $inputObject
如果失败,请尝试将主体放入行中并将其从 InputObject 中取出:
Register-ScheduledTask -TaskName $taskName -Action $action -Principal $Principal