我试图写一个小powerscript执行现有的.ps1文件作为一个不同的用户帐户比登录。我需要定期运行现有的.ps1文件。我需要一个powershell脚本,可以双击运行,它执行现有的.ps1文件作为不同的用户。
这是我目前掌握的情况:
$username = 'username'
$password = 'password'
$script = '\\path\to\file\script.ps1'
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword
Start-Process powershell.exe -File $script -Credential $credential
似乎凭证标志可能不在正确的位置。
希望你能给点指导。
2条答案
按热度按时间bnl4lu3b1#
顺便说一句:为了安全起见,最好避免使用 plain-text密码,尤其是在脚本中存储密码时。
TL;医生
Start-Process
具有指定目标 * 可执行文件的**-FilePath
参数和接受传递给该可执行文件的所有 * 参数 * 的数组 * 类型的-ArgumentList
参数**。这两个参数是前两个 * 位置 * 参数,因此不必严格地为它们 * 命名 *,但必须满足
-ArgumentList
的语法要求,这意味着两件事:,
分隔它们(这将创建一个 array)。-
* 开头的参数,因为Start-Process
会将它们解释为 * 它的 * 参数。因此:
它是以下内容的缩写:
不幸的是,一个长期存在的bug(为了向后兼容而无法修复)使这种方法 * 脆弱*,因为PowerShell在后台构造进程命令行时 * 不 * 为您应用按需双引号和转义-请参见GitHub issue #5576。
因此,您必须 * 自己 * 执行任何嵌入式双引号和转义,如果您将一个 * 单个 * 字符串传递给
-ArgumentList
(该字符串对要传递的 * 所有 * 参数进行编码),则最终会更容易**做到这一点,如顶部的解决方案所示。tpgth1q72#
正如mklement 0正确指出的,最好不要显式使用密码,我建议使用start-job而不是运行单独的脚本,另外,我将自己添加密码加密函数。
输出:C:\测试