私はソフトウェアを展開するために必要なコンピュータシステムがかなりあります。私は、ユーザーがローカル管理者であるかどうかを検出し、管理者権限を持っているかどうかを検出する単純な方法を使用してきました。必要に応じて、スクリプトは昇格された特権で再起動します。ユーザーがローカル管理者でない場合、スクリプトは別の資格情報(ローカル管理者)を使用して再起動します。このスクリプトは、Windows 8やWindows 10など、PowerShellの新しいバージョンのシステムでうまく機能します。adminユーザーとしてPowerShellスクリプトを再起動
問題は、ユーザーが管理者でなく、スクリプトがWindows 7で実行されている場合です。このスクリプトは、$PSScriptPath
を使用して再起動します。スクリプト。 PowerShellの以前のバージョンではこれはうまくいかないと思います。だから私は、$PSScriptRoot
のメジャーPowerShellのバージョンが<であると設定しようとしました。問題は、スクリプトが何らかの種類のループに詰まって、ウィンドウが絶えず開いて閉じてしまっていて、 「tは私がエラー
は、パラメータの引数をバインドすることはできません取得
パス』を$PSScriptRoot
を定義 『がnullであるため、
私は$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