如何在具有其他accompt(和管理员权限)的ps1中启动另一个ps1?

时间:2019-04-17 08:52:30

标签: powershell runas admin-rights

我的一些用户计算机上有一个错误,我需要我的用户从他们的计算机上启动.ps1来解决此问题,以便我可以在需要时通过NetSupport访问他们的计算机。 问题是他们没有计算机上的管理员权限。

这就是我已经做过的:

  • 在.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"

这部分似乎工作正常。 现在,进入工作的“客户端”部分:

$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窗口,但没有管理员权限。
Start-Process powershell -Credential $credentials -ArgumentList '-noprofile -command &{Start-Process powershell -ArgumentList "-file "\\serveur\path\file.ps1" "}'
  • 2:当我设置本地管理员(。\ administrator)时,新的Powershell Windows以管理员权限启动,但是只有一半脚本(file.ps1)有效,并且如果我设置了domain \ adminaccount,则与上面相同。 / li>
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" "}'

但是没有按预期工作... 如果你们有一个主意,那就太好了!!

---------------------编辑---------------- 我在file.ps1中犯了一个错误,所以

Invoke-Item (Start-Process powershell.exe -Credential $credentials ((Split-Path $MyInvocation.InvocationName) + "\\serveur\path\file.ps1" ))

与本地管理员(。\ administrator)一起使用可以正常工作,该脚本的确以管理员权限开头,并且可以按预期工作。 但是...不适用于domaine admin(domain \ admin):脚本确实启动了,但是没有管理员权限...

2 个答案:

答案 0 :(得分:0)

您可以尝试使用此script吗?

我能够按以下方式致电此电话,并获得更高级别的会话。

Invoke-Elevated -FilePath \\server\share\file.ps1

答案 1 :(得分:0)

如果有人对解决方案感兴趣,我发现它可以与本地管理员帐户一起使用:

无法使其与file.ps1一起使用,我想在UNC路径上执行。 因此,我必须在执行脚本的本地计算机上第1次将其复制。

$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

最后,我可以使用管理员权限启动file.ps1脚本:

Start-Process -Credential $Credentials "$PSHOME\powershell.exe" -WorkingDirectory "C:\Users\$env:USERNAME" -ArgumentList "-ExecutionPolicy Bypass & '$destination\file.ps1'"