如何使用其他帐户(和管理员权限)在 ps1 中启动另一个 ps1?
How to launch an other ps1 within a ps1 with an other accompt (and admin rights)?
我的一些用户计算机上有一个错误,我需要我的用户从他们的计算机启动 .ps1 来解决问题,这样我就可以在他们需要时访问他们的计算机网络支持。
问题是他们在他们的计算机上没有管理员权限。
这就是我已经做过的事情:
- 在 .txt 中加密管理员密码(这个将由我以管理员权限启动)
Function RandomKey {
$RKey = @()
For ($i=1; $i -le 16; $i++) {
[Byte]$RByte = Get-Random -Minimum 0 -Maximum 256
$RKey += $RByte
}
$RKey
}
$Key = RandomKey
$key |Out-File "$path\Key.txt"
Read-Host "Enter one admin Password" -assecurestring | ConvertFrom-SecureString -key $Key | Out-file "$path\EncKey.txt"
这部分似乎工作正常。
现在,开始工作 "client" 部分:
$PassKey = get-content "$Path\Key.txt"
$Password = get-content "$Path\EncKey.txt" | Convertto-SecureString -Key $PassKey
$User = Read-Host "Enter the ID given by your administrator"
$credentials = New-Object System.Management.Automation.Pscredential `
-Argumentlist $User,$Password
还有一个不起作用(我在这里尝试了很多东西,例如):
- 1 :当我设置本地管理员 (.\administrator) 时,一个新的 powershell Windows 以管理员权限启动,但不执行 file.ps1 应该执行的操作,并且如果我设置 domain\adminaccount 它只是启动一个新的 posershell windows 但没有管理员权限。
Start-Process powershell -Credential $credentials -ArgumentList '-noprofile -command &{Start-Process powershell -ArgumentList "-file "\serveur\path\file.ps1" "}'
- 2:当我设置本地管理员 (.\administrator) 时,一个新的 powershell Windows 以管理员权限启动,但只有一半的脚本 (file.ps1) 有效,如果我set domain\adminaccount : 同上.
Invoke-Item (Start-Process powershell.exe -Credential $credentials ((Split-Path $MyInvocation.InvocationName) + "\serveur\path\file.ps1" ))
- 3 等等
Start-Process powershell -ArgumentList '-executionpolicy, bypass, -file "\serveur\path\file.ps1", -Credential $credentials, -verb RunAs'
Start-Process -filepath "\serveur\path\file.ps1" -Credential $credentials -ArgumentList '-noprofile -noexit -command -verb runas}'
Start-Process powershell -Credential $credentials -ArgumentList '-noprofile -command &{Start-Process powershell -ArgumentList "-file "\serveur\path\file.ps1" "}'
但没有任何效果如预期...
如果你们有想法那就太好了!!
--------------------编辑----------------
我的文件有误。ps1,所以
Invoke-Item (Start-Process powershell.exe -Credential $credentials ((Split-Path $MyInvocation.InvocationName) + "\serveur\path\file.ps1" ))
这在本地管理员 (.\administrator) 下运行良好,脚本确实以管理员权限启动并按预期运行。
但是...它不适用于域管理员 (domain\admin):脚本确实启动了,但没有管理员权限...
你可以尝试使用这个 script 吗?
我能够如下调用它并获得提升的会话。
Invoke-Elevated -FilePath \server\share\file.ps1
如果有人对我发现的解决方案感兴趣,可以使用这里的本地管理员帐户,那就是:
无法使用该文件。ps1我想在 UNC 路径上执行。
所以我必须首先将它复制到执行脚本的本地计算机上。
$path="[...]\temp"
$source= "[...]file.ps1"
$destination = "c:\users$env:USERNAME\documents"
if (!(Test-Path "$destination\Netlogon_Firewall.ps1")){Copy-Item -Path $source -Destination $destination}
然后我导入我的凭据:
$PassKey = get-content "$Path\Key.txt"
$Password = get-content "$Path\EncKey.txt" | Convertto-SecureString -Key $PassKey
$User = Read-Host "Enter the ID given by your administrator"
$credentials = New-Object System.Management.Automation.Pscredential `
-Argumentlist $User,$Password
最后我可以启动文件了。ps1 具有管理员权限的脚本:
Start-Process -Credential $Credentials "$PSHOME\powershell.exe" -WorkingDirectory "C:\Users$env:USERNAME" -ArgumentList "-ExecutionPolicy Bypass & '$destination\file.ps1'"
我的一些用户计算机上有一个错误,我需要我的用户从他们的计算机启动 .ps1 来解决问题,这样我就可以在他们需要时访问他们的计算机网络支持。 问题是他们在他们的计算机上没有管理员权限。
这就是我已经做过的事情:
- 在 .txt 中加密管理员密码(这个将由我以管理员权限启动)
Function RandomKey {
$RKey = @()
For ($i=1; $i -le 16; $i++) {
[Byte]$RByte = Get-Random -Minimum 0 -Maximum 256
$RKey += $RByte
}
$RKey
}
$Key = RandomKey
$key |Out-File "$path\Key.txt"
Read-Host "Enter one admin Password" -assecurestring | ConvertFrom-SecureString -key $Key | Out-file "$path\EncKey.txt"
这部分似乎工作正常。 现在,开始工作 "client" 部分:
$PassKey = get-content "$Path\Key.txt"
$Password = get-content "$Path\EncKey.txt" | Convertto-SecureString -Key $PassKey
$User = Read-Host "Enter the ID given by your administrator"
$credentials = New-Object System.Management.Automation.Pscredential `
-Argumentlist $User,$Password
还有一个不起作用(我在这里尝试了很多东西,例如):
- 1 :当我设置本地管理员 (.\administrator) 时,一个新的 powershell Windows 以管理员权限启动,但不执行 file.ps1 应该执行的操作,并且如果我设置 domain\adminaccount 它只是启动一个新的 posershell windows 但没有管理员权限。
Start-Process powershell -Credential $credentials -ArgumentList '-noprofile -command &{Start-Process powershell -ArgumentList "-file "\serveur\path\file.ps1" "}'
- 2:当我设置本地管理员 (.\administrator) 时,一个新的 powershell Windows 以管理员权限启动,但只有一半的脚本 (file.ps1) 有效,如果我set domain\adminaccount : 同上.
Invoke-Item (Start-Process powershell.exe -Credential $credentials ((Split-Path $MyInvocation.InvocationName) + "\serveur\path\file.ps1" ))
- 3 等等
Start-Process powershell -ArgumentList '-executionpolicy, bypass, -file "\serveur\path\file.ps1", -Credential $credentials, -verb RunAs'
Start-Process -filepath "\serveur\path\file.ps1" -Credential $credentials -ArgumentList '-noprofile -noexit -command -verb runas}'
Start-Process powershell -Credential $credentials -ArgumentList '-noprofile -command &{Start-Process powershell -ArgumentList "-file "\serveur\path\file.ps1" "}'
但没有任何效果如预期... 如果你们有想法那就太好了!!
--------------------编辑---------------- 我的文件有误。ps1,所以
Invoke-Item (Start-Process powershell.exe -Credential $credentials ((Split-Path $MyInvocation.InvocationName) + "\serveur\path\file.ps1" ))
这在本地管理员 (.\administrator) 下运行良好,脚本确实以管理员权限启动并按预期运行。 但是...它不适用于域管理员 (domain\admin):脚本确实启动了,但没有管理员权限...
你可以尝试使用这个 script 吗?
我能够如下调用它并获得提升的会话。
Invoke-Elevated -FilePath \server\share\file.ps1
如果有人对我发现的解决方案感兴趣,可以使用这里的本地管理员帐户,那就是:
无法使用该文件。ps1我想在 UNC 路径上执行。 所以我必须首先将它复制到执行脚本的本地计算机上。
$path="[...]\temp"
$source= "[...]file.ps1"
$destination = "c:\users$env:USERNAME\documents"
if (!(Test-Path "$destination\Netlogon_Firewall.ps1")){Copy-Item -Path $source -Destination $destination}
然后我导入我的凭据:
$PassKey = get-content "$Path\Key.txt"
$Password = get-content "$Path\EncKey.txt" | Convertto-SecureString -Key $PassKey
$User = Read-Host "Enter the ID given by your administrator"
$credentials = New-Object System.Management.Automation.Pscredential `
-Argumentlist $User,$Password
最后我可以启动文件了。ps1 具有管理员权限的脚本:
Start-Process -Credential $Credentials "$PSHOME\powershell.exe" -WorkingDirectory "C:\Users$env:USERNAME" -ArgumentList "-ExecutionPolicy Bypass & '$destination\file.ps1'"