我遇到了一个大问题。我需要一个bat 脚本来根据计算机的名称设置ipv4。例如,主机名是 cho-ryn-k1,我需要脚本从当前 ipv4 中获取前三个八位字节,并将最后一个更改为 201(k2 将有 202、k3 -> 203 等),仅主机名以结尾s1 将以 10 结尾。我还需要脚本将掩码设置为 255.255.255.0,设置两个 dns 8.8.8.8 和 1.1.1.1,设置两个网关,都具有相同的三个八位位组,其中一个以 254 秒结尾,以 253 结尾。
现在的问题是,在win11(我需要设置的每台计算机都使用的系统)中,我只能右键单击并在powershell中运行,没有管理员权限。该脚本不会更改任何实际配置。我需要的是一种立即以管理员身份运行它的方法。
$hostname = hostname
$currentIP = (Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object { $_.IPAddress -ne $null -and $_.IPEnabled -eq $true }).IPAddress[0]
$firstThreeOctets = $currentIP -replace '\.\d+$', ''
if ($hostname -like "*s1") {
$desiredIP = "$firstThreeOctets.10"
} else {
$number = $hostname -replace '[^0-9]', ''
$desiredIP = "$firstThreeOctets.20$number"
}
$adapter = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object { $_.IPAddress -ne $null -and $_.IPEnabled -eq $true }
$adapter.EnableStatic($desiredIP, "255.255.255.0") | Out-Null
$dnsServers = "8.8.8.8", "1.1.1.1"
$adapter.SetDNSServerSearchOrder($dnsServers) | Out-Null
$gateway1 = "$firstThreeOctets.254"
$gateway2 = "$firstThreeOctets.253"
$gateways = @($gateway1, $gateway2)
$adapter.SetGateways($gateways) | Out-Null
Write-Host "Stworzono przez " -NoNewline
Write-Host "Maksymilian Gawron" -ForegroundColor Red -NoNewline
Write-Host " dla wdrozen aptek " -NoNewline
Write-Host "Bankleku" -ForegroundColor Blue
Write-Host "Nazwa komputera: " -NoNewline
Write-Host "$hostname" -ForegroundColor Green
Write-Host "Obecny adres: " -NoNewline
Write-Host "$desiredIP" -ForegroundColor Green
Write-Host "Maska: " -NoNewline
Write-Host "255.255.255.0" -ForegroundColor Green
Write-Host "Brama 1: " -NoNewline
Write-Host "$gateway1" -ForegroundColor Green
Write-Host "Brama 2: " -NoNewline
Write-Host "$gateway2" -ForegroundColor Green
Write-Host "DNSy: " -NoNewline
Write-Host "$dnsServers" -ForegroundColor Green
现在我知道这有效的唯一方法是在管理员中运行 powershell 并复制整个代码。我不想将代码从 .ps1 文件复制到 powershell。该脚本的目的是为了节省时间。如果你告诉我需要在 cmd 或 pwsh 中更改很多内容,那么该脚本就没用了。重点是我需要有一个随身碟,到电脑上运行脚本并完成。
尝试将此代码块放在脚本的开头:
If (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
$ScriptPath = $PSScriptRoot + "\" + $MyInvocation.MyCommand.Name
Start-Process powershell.exe "-File", ('"{0}"' -f $ScriptPath) -Verb RunAs
exit
这段代码基本上是一个 自动提升权限。
希望您觉得它有用! }