PC起動時に管理者権限でbatファイルを実行させたい

実現したいこと

社内でWindows11にアップロードが進行中。
バージョンアップ後、社内のネットワーク(Wi-Fi)への接続チェックも併せて行います。
何台か社内のネットワークにつながりにくいPCがいました。
起動時につながりにくい
途中で切れる
症状はいくつかあるのですが、固定IPで再設定して、現在手動でその問題を解消しています。

利用者がPC起動時したときにipアドレスを書き替えることを実現したい

発生している問題・分からないこと

batファイルは走るが、
ipは書き込まれていない。

エラーメッセージ

error

1赤い字が見えるので、エラーが出ているようなのですが、そのままスンって終わってしまうためエラーメッセージは未確認

該当のソースコード

@powershell "$s=[scriptblock]::create((gc %~f0|?{$_.readcount -gt 1})-join\"`n\");&$s" %*&goto:eof if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Administrators")) { Start-Process powershell.exe "-File `"$PSCommandPath`"" -Verb RunAs; exit } $adapter = Get-NetAdapter | Where-Object {$_.InterfaceAlias -eq "Wi-Fi"} # アダプターのコンフィグを取得 $conf = $adapter | Get-NetIPConfiguration # IPアドレスが設定されている場合 If ($conf.IPv4Address.IPAddress) { # その設定を削除する $adapter | Remove-NetIPAddress -AddressFamily "IPv4" -Confirm:$false } # デフォルトゲートウェイが設定されている場合 If ($conf.Ipv4DefaultGateway) { # その設定を削除する $adapter | Remove-NetRoute -AddressFamily "IPv4" -Confirm:$false } $adapter | New-NetIPAddress ` -AddressFamily "IPv4" ` -IPAddress "XXX.XX.X.XXX" ` -PrefixLength 24 ` -DefaultGateway "XXX.XX.X.XXX" $adapter | Set-DnsClientServerAddress -ServerAddresses "2XX.1XX.XX.XX,2XX.1XX.XX.1XX"

試したこと・調べたこと

上記の詳細・結果

@powershell "$s=[scriptblock]::create((gc %~f0|?{$_.readcount -gt 1})-join"`n");&$s" %*&goto:eof

についてはテラテイルや別の解説もあり。
のURLを載せておきます。
https://teratail.com/questions/254067
https://gist.github.com/newgami/de924220b8241561203b902557b83ed8
要するに「ps1ファイルをbatファイル化」して実行する

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Administrators")) { Start-Process powershell.exe "-File "$PSCommandPath"" -Verb RunAs; exit }

はpowershellで管理者権限で実行させたい場合に使う
https://qiita.com/sakekasunuts/items/63a4023887348722b416

ここからは実際に手動でpowershell管理者権限で実行させると最後終わり、きちんとipが書き換えられてpowershellも実行結果をきちんと出してくれます。

$adapter = Get-NetAdapter | Where-Object {$_.InterfaceAlias -eq "Wi-Fi"}

アダプターのコンフィグを取得
$conf = $adapter | Get-NetIPConfiguration

IPアドレスが設定されている場合
If ($conf.IPv4Address.IPAddress) {

# その設定を削除する $adapter | Remove-NetIPAddress -AddressFamily "IPv4" -Confirm:$false

}

デフォルトゲートウェイが設定されている場合
If ($conf.Ipv4DefaultGateway) {

# その設定を削除する $adapter | Remove-NetRoute -AddressFamily "IPv4" -Confirm:$false

}

$adapter | New-NetIPAddress -AddressFamily "IPv4"
-IPAddress "XXX.XX.X.XXX" -PrefixLength 24
-DefaultGateway "XXX.XX.X.XXX"

$adapter | Set-DnsClientServerAddress -ServerAddresses "2XX.1XX.XX.XX,2XX.1XX.XX.1XX"

実行処理後の結果を表示して終えてくれる状態です。

補足

特になし

コメントを投稿

0 コメント