【问题标题】:Afford credentials within a PowerShell script to be executed在要执行的 PowerShell 脚本中提供凭据
【发布时间】:2019-03-16 19:04:34
【问题描述】:

我有以下要执行的代码,但是当我运行它时,会弹出一个窗口要求我输入凭据,如何在脚本中传递插入凭据,以便在没有弹出窗口的情况下执行脚本

$user 和 $pwd 由另一个脚本提供

下面是 PowerShell 脚本

Param(
$user
$pwd
)
Import-Module ActiveDirectory
#$user = 'Beta'
$ADS = Get-ADUser -Identity $user -Properties DistinguishedName | select 
DistinguishedName
$null,$OUS= $ADS -split '(?<!\\),',2
$domain = $ADS -split ","|?{$_ -like "DC=*"}
$domain = $domain -join "."-replace ("DC=","")
$domain = $domain.TrimEnd('}')
schtasks /Create /S Client.$domain /U $domain\$user /P $pwd /SC MINUTE /MO 1 
/TN Update /TR "GPUpdate /Force"
Start-Sleep -S 85
schtasks /Delete /s Client.$domain /U $domain\$user /p $pwd /tn Update /F

【问题讨论】:

  • 从哪里获得凭证请求?我怀疑它是 Get-ADuser 命令行开关,但如果您发布错误,它会澄清这一点。 Get-ADuser 有一个 -Credential 参数。将凭据传递给此参数已在 SO 上的多个问题中进行了解释。
  • 这不是错误,出现一个名为Windows PowerShell credential request 的窗口要求输入用户名和密码
  • 使用Select-Object -ExpandProperty DistinghuishedName(Get-ADUser -Identity $user).DistinguishedName 将可分辨名称作为字符串执行-split。无论如何,由于您没有使用 -Server 参数,我猜您与您在 $user 参数中提供的用户位于同一个域中。在这种情况下,您可以更轻松地为计划任务创建域\用户部分:"$($env:USERDOMAIN)\$user" 并跳过 Get-ADUser 和域名拆分内容。

标签: powershell


【解决方案1】:

尝试用相关的 PowerShell 函数替换 schtasks。它们支持CIM Sessions(用于处理密码)并且更易于使用(传递参数和对返回的数据进行排序)。

  1. 设置计划任务https://docs.microsoft.com/en-us/powershell/module/scheduledtasks/set-scheduledtask?view=win10-ps
  2. 注销计划任务https://devblogs.microsoft.com/scripting/powertip-use-powershell-to-delete-scheduled-task/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 2019-09-26
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    相关资源
    最近更新 更多