У меня есть довольно много компьютерных систем, которые нам нужно развернуть. Я использовал простой метод для определения, является ли пользователь локальным администратором, а затем обнаруживает, имеют ли они права администратора. При необходимости сценарий перезагружается с повышенными привилегиями. Если пользователь не является локальным администратором, сценарий перезаписывается с использованием других учетных данных (локальный администратор). Сценарий отлично работает на системах с более поздней версией PowerShell, таких как Windows 8 и Windows 10.Перезапуск сценария PowerShell как пользователя admin
Проблема заключается в том, что пользователь не является администратором, а сценарий работает в Windows 7. Сценарий использует $PSScriptPath
для повторного запуска сценарий. Я не думаю, что это работает в более ранних версиях PowerShell. Поэтому я попытался установить $PSScriptRoot
сам, если версия Major PowerShell - < 3. Проблема заключается в том, что скрипт застрял в какой-то петле, где он постоянно открывается и закрывает окна, а затем я должен убить его ... Если я «т определить $PSScriptRoot
я получаю ошибку
Невозможно привязать аргумент параметра„Путь“, потому что он является недействительным
Я предполагаю, что это потому, что $PSScriptRoot
не определен в PowerShell 2.0.
Вот пример того, что я пытаюсь сделать:
#Check if PowerShell version is greater than 2. If not, set $PSSriptRoot.
if ($PSVersionTable.PSVersion.Major -lt 3) {
$PSScriptRoot = Split-Path -Parent $MyInvocation.MyCommand.Definition
}
#Check if the user is a local admin. If they are, set $LocalAdmin to $True.
$LocalAdmin = $false
if ((net localgroup administrators) -match ([System.Environment]::UserDomainName + "\\" + [System.Environment]::Username)) {
$LocalAdmin = $true
}
if ($LocalAdmin) {
#Check if the local admin needs to run the script as administrator
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
$arguments = "& '" + $MyInvocation.MyCommand.Definition + "'"
Start-Process powershell -Verb runas -ArgumentList $arguments
break
}
} else {
#Not a local admin. Relaunch script as admin user.
Start-Process -Credential $credential (Join-Path $PSHome powershell.exe) -ArgumentList (@("-File",
(Join-Path $PSScriptRoot $MyInvocation.MyCommand)) + $args)
exit
}
спасибо. Я понял свою ошибку с зацикленными окнами. Я действительно оценил совет и нашел время, чтобы объяснить. Приветствия. – Cormang