使用powershell创建计划任务,而不是存储密码

时间:2015-09-22 21:12:46

标签: powershell windows-server-2012-r2 powershell-v4.0

我正在尝试创建一个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

这很适合设置任务我唯一能找到的就是能够从管理员组中的任何用户运行任务,而管理员(运行任务的人)没有登录,我不知道#39; t想要存储密码。当我通过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      :

我发现的唯一区别是LogonType是S4U与密码。所以在我的powershell中我添加了

$principal = New-ScheduledTaskPrincipal -UserId Administrator -LogonType S4U -RunLevel Highest

但是即使代码中的LogonType设置为S4U,它仍会在创建密码时将其设置为密码。我可以进入GUI并在powershell代码运行后以物理方式更改任务,并检查该框是否设置正确。但有没有人知道为什么代码不会这样做?或者如果我错过了什么?

感谢您提供的任何帮助,

麦克

1 个答案:

答案 0 :(得分:2)

我正在寻找类似的东西,使用本地管理员帐户启用“不存储密码”。你的帖子让我走在正确的轨道上,现在我的工作正常。

请改为尝试:

Register-ScheduledTask -TaskName $taskName -taskpath $taskPath -InputObject $inputObject

如果失败,请尝试将主体放在行中并将其从InputObject中取出:

Register-ScheduledTask -TaskName $taskName -Action $action -Principal $Principal