takuo_maeda
@takuo_maeda (前田 卓大)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【PowerShell】IP設定コマンドのIPを入力させて設定

解決したいこと

以下

1)ReadHostというコマンドを質問しておしえていただきました。
見ながら設定したつもりですが、
まず入力の際に文字化けしています。こちらの解決方法は?;どのようにすればよいでしょう?

もともと→IPアドレスの最後の3桁を入力してください

発生している問題・エラー

(IP繧「繝峨Ξ繧ケ縺ョ譛蠕後・・捺。√r蜈・蜉帙@縺ヲ縺上□縺輔>): 163
New-NetIPAddress : 引数 '+163' を受け入れる位置指定パラメーターが見つかりません。
発生場所 :33 文字:12
+ $adapter | New-NetIPAddress `
+            ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [New-NetIPAddress]ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,New-NetIPAddress

または、問題・エラーが起きている画像をここにドラッグアンドドロップ
しました↓
スクリーンショット 2024-08-30 085018.png

該当するソースコード

<# :
@echo off
openfiles >nul 2>&1
if errorlevel 1 (
  powershell start-process "'%~f0'" -verb runas
  goto :EOF
)
powershell -noprofile -command "invoke-expression (get-content '%~f0' -raw)"
goto :EOF
#>

# 以下 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
}
$input=Read-Host "(IPアドレスの最後の3桁を入力してください)" 

$adapter | New-NetIPAddress `
 -AddressFamily "IPv4" `
 -IPAddress "172.17.2."+$input `
 -PrefixLength 24 `
 -DefaultGateway "172.17.2.253"
 
 $adapter | Set-DnsClientServerAddress -ServerAddresses "211.129.12.47,211.129.14.138"

例)
ここ↓

$input=Read-Host "(IPアドレスの最後の3桁を入力してください)" 

0

1Answer

解決したい事が文字化けであれば、質問のタイトルも見ただけで概要がわかるものにしてください。("出力されるメッセージが文字化けする"等)
また、サンプルコードは現象を再現可能な必要最小限なものにして、関係のない部分は削除するようにしてください。

保存したファイルの文字コードはUTF-8ですかね?

powershell -noprofile -command "invoke-expression (get-content '%~f0' -raw)"

get-contentしている箇所を、文字コードを指定して読み込むように修正すると正しく出力されると思います。

powershell -noprofile -command "invoke-expression (get-content -Encoding UTF8 '%~f0' -raw)"

一応、動作確認してみました。
下記のコードを文字コードUTF-8でtest.batという名前で保存し、実行しました。

test.bat
<# :
@echo off
openfiles >nul 2>&1
if errorlevel 1 (
  powershell start-process "'%~f0'" -verb runas
  goto :EOF
)
powershell -noprofile -command "invoke-expression (get-content -Encoding UTF8 '%~f0' -raw)"
goto :EOF
#>

$input=Read-Host "(IPアドレスの最後の3桁を入力してください)" 

実行結果

0Like

Comments

  1. @takuo_maeda

    Questioner

    確かにUTF-8になっています

  2. @takuo_maeda

    Questioner

    コマンドを読み込む部分にさらに指定が必要なんですね。
    これは保存ファイルがUTF-8でも読み込む際にはわざわざしても指定してあげる必要があるということでしょうか?

  3. Windowsのコマンドプロンプトは、日本語でのデフォルトの文字コードがShift_JISなので、そのままUTF-8の文字列を出力すると文字化けします。

  4. @takuo_maeda

    Questioner

    ご教示いただきありがとうございます。

Your answer might help someone💌