the*_*kyo 5 powershell powershell-4.0 windows-server-2012-r2
我正在尝试制作一个 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
Run Code Online (Sandbox Code Playgroud)
这对于设置任务很有效,我唯一要寻找的是能够在管理员(任务运行的身份)未登录且我不想要的情况下从 admin 组中的任何用户运行任务来存储密码。当我通过 GUI 设置任务时,无论用户是否登录,我都可以选择按钮来运行上面的代码实现的。但它不会选中说不存储密码的框。当我在 powershell 中运行以下命令以查看创建的任务的属性时,输出如下
get-scheduledtask testtask | select -ExpandProperty principal
DisplayName :
GroupId :
Id : Author
LogonType : Password
RunLevel : Highest
UserId : WIN-REH2TQO7H7S\Administrator
ProcessTokenSidType : Default
RequiredPrivilege :
PSComputerName :
Run Code Online (Sandbox Code Playgroud)
如果我在通过 GUI 创建的任务上运行相同的命令,并且不保存密码检查,我会得到以下信息
get-scheduledtask testtask | select -ExpandProperty principal
DisplayName :
GroupId :
Id : Author
LogonType : S4U
RunLevel : Highest
UserId : WIN-REH2TQO7H7S\Administrator
ProcessTokenSidType : Default
RequiredPrivilege :
PSComputerName :
Run Code Online (Sandbox Code Playgroud)
我发现的唯一区别是 LogonType 是 S4U 与密码。所以在我的powershell中我添加了
$principal = New-ScheduledTaskPrincipal -UserId Administrator -LogonType S4U -RunLevel Highest
Run Code Online (Sandbox Code Playgroud)
但即使在代码中将 LogonType 设置为 S4U,它在创建时仍将其设置为密码。我可以进入 GUI 并在 powershell 代码运行后物理更改任务,并在该框设置正确时选中该框。但是有没有人知道为什么代码不会这样做?或者如果我错过了什么?
感谢您的任何帮助,您可以提供,
马克。
小智 3
我一直在寻找类似的东西,使用启用了“不存储密码”的本地管理员帐户。你的帖子让我走上了正轨,我的现在可以工作了。
试试这个:
Register-ScheduledTask -TaskName $taskName -taskpath $taskPath -InputObject $inputObject
Run Code Online (Sandbox Code Playgroud)
如果失败,请尝试将主体放入行中并将其从 InputObject 中取出:
Register-ScheduledTask -TaskName $taskName -Action $action -Principal $Principal
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6636 次 |
| 最近记录: |