1

我的一些用户计算机上存在错误,我需要我的用户从他们的计算机启动 .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 windows但没有管理员权限。
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 :与上面相同。
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) :脚本确实启动了,但没有管理员权限...

4

2 回答 2

0

如果有人对我发现的解决方案感兴趣,可以在这里使用本地管理员帐户,它是:

无法使其与我想在 UNC 路径上执行的 file.ps1 一起使用。所以我不得不在执行脚本的本地计算机上第一次复制它。

$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'"
于 2019-04-19T06:52:49.513 回答
0

你可以尝试使用这个脚本吗?

我能够如下调用它并获得提升的会话。

Invoke-Elevated -FilePath \\server\share\file.ps1
于 2019-04-17T09:49:23.593 回答