実現したいこと
社内で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 コメント