1. PowerShellとは
マイクロソフトが開発したCUIのシェル。.NET上で動作する。
コマンドプロンプトよりはるかに高機能で、 Windowsの管理がコマンドだけでできるようになる。
2. 基本的な構文
PowerShellにおける基本的な構文は以下のサイトにて確認できます。
3. PowerShellの実行ポリシー変更
クライアント版Windows1のPowerShellは、標準設定ではスクリプト(拡張子.ps1
のファイル)の実行が制限されています。これは、マルウェアなどの危険なスクリプトの不用意な実行を防ぐというセキュリティ上の配慮によるものです。スクリプトを実行するには、事前に実行ポリシーを変更する必要があります。
実行ポリシー | 署名あり | 署名なし/ローカル | 署名なし/非ローカル | 説明 |
---|---|---|---|---|
Restricted | x | x | x | すべてのスクリプトの実行を制限 (初期設定) |
AllSigned | o | x | x | 署名のあるスクリプトのみ実行可能 |
RemoteSigned | o | o | x | ローカル上のスクリプトと非ローカル上の署名のあるスクリプトのみ実行可能 |
Unrestricted | o | o | △ | すべてのスクリプトが実行可能だが非ローカル上のスクリプトは実行時に許可が必要 |
Bypass | o | o | o | すべてのスクリプトが実行可能 |
現在の実行ポリシーを確認したい場合は以下のコマンドを実行します。
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
一般的には以下のような、現在ユーザーがPowerShellを実行する際、RemoteSigned
ポリシーを利用する設定がバランス的に良いと思います。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
セキュリティー重視の場合は、プロセグごとに許可する設定も良いと思います。
Set-ExecutionPolicy RemoteSigned -Scope Process -Force
4. よく使うコマンド
シャットダウン、再起動
# Shutdown OS
Stop-Computer -Force
# Reboot OS
Restart-Computer -Force
日付の取得尾
Get-Date
2021年2月17日 11:28:03
Get-Date -Format FileDateTime
20210217T1127458251
処理の一時停止
Start-Sleep -Seconds 30 # 30s停止
5. 全般の設定
ファイルエクスプローラーの表示変更
エクスプローラーの隠しファイル、隠しフォルダーを表示させたり、拡張子を表示させたい場合は以下のコマンドを実行します。
## Folder option(show file extensions)
Set-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -name "HideFileExt" -Value 0
## Folder option(show hidden files)
Set-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -name "Hidden" -Value 1
自動ログインの設定
Windowsの自動ログインを有効化したい場合は以下のコマンドを実行します。
# Enable auto login
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "AutoAdminLogon" /t REG_SZ /d "1" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "DefaultUserName" /t REG_SZ /d $USER_ID /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "DefaultPassword" /t REG_SZ /d $USER_PASSWORD /f
電源設定
Windowsの電源設定(ディスプレイ電源停止時間やスリープ遷移時間)を設定する場合は以下のコマンドを実行します。
0とすることで無期限にすることが可能です。
# ディスプレイの電源を切る
powercfg -x monitor-timeout-ac 0
powercfg -x monitor-timeout-dc 0
# コンピュータをスリープ状態にする
powercfg -x standby-timeout-ac 0
powercfg -x standby-timeout-dc 0
タスクスケジューラの登録
タスクスケジューラを登録したい場合は、以下のコマンドを実行します。
各コマンドにさまざまな引数が存在するため、公式サイトで利用可能な引数を確認してください。
$Trigger = New-ScheduledTaskTrigger -AtStartup; # -AtStartupは起動時に実行するという意味
$Setting = New-ScheduledTaskSettingsSet -DisallowHardTerminate -ExecutionTimeLimit 0 # 強制終了の禁止と実行制限を無期限化
$Action = New-ScheduledTaskAction -Execute $EXECUTE_FILE_PATH -Argument $ARGUMENT;
Register-ScheduledTask -TaskPath "\" -TaskName $TASK_NAME -User $LIGIN_USER -Password $USER_PASSWORD -RunLevel Highest -Trigger $Trigger -Action $Action -Setting $Setting;
6. ネットワーク設定関連
Wi-FiのSSIDとパスワードの確認
以下のコマンドで、ワイヤレスNIC2に登録されているプロファイルのSSIDとパスワードを確認することが可能です。
netsh wlan show profiles | %{ $_.Split(":")[1]} | `
Where-Object{$_ -ne $null -and ( $_ -notmatch "^\s*$" ) } | `
ForEach-Object{$_.trim()} | `
ForEach-Object{ netsh wlan show profile name="$_" key=clear} | `
Where-Object{ $_ -like "*主要なコンテンツ*" -or ( $_ -like "*SSID 名*" ) }
SSID 名 : "AP-1"
主要なコンテンツ : xxxxxxxxxxxxx
SSID 名 : "AP-2"
主要なコンテンツ : xxxxxxxxxxxxx
NICに静的IPv4を設定
PCをネットワークに接続させる時、静的にIPアドレスを登録して接続したい場合があります。その際、Set-NetIPAddressなどのコマンドを用いて設定可能なのですが、イーサネットに関しては、LANケーブルが接続されていない状態において、リンクアップしていない状態のネットワークインターフェイスのDHCP3設定をSet-NetIPInterface -Dhcp Disabled
で無効化できません。そこで、TCP/IPサービスのレジストリキーを直接操作し、DHCP機能を無効化させる必要があります。
NICの設定に関してはQiitaの「PowerShellでネットワークアダプタの設定変更」を利用しました。実際に設定する際はこちらを参考にしてください。
Wi-Fiプロファイルの登録
複数台に同じWi-Fi接続情報を登録したい場合、以下の手順を踏むことで簡単に追加を行うことができます。
ただし、この手法を利用する場合は、1台目は手動でWi-Fi接続しプロファイルをインポートする必要があります。
また、ここで使用しているnetsh
コマンドは非推奨(将来的に削除される予定)です。
まず、以下のコマンドを実行し、プロファイル情報をXMLファイルでエクスポートします。
# 既知のプロファイルを表示
netsh wlan show profiles
# インポートしたいプロファイルのSSIDを指定して、指定フォルダにXMLファイルをエクスポート
netsh wlan export profile name="SSID" folder=".\"
<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
<name>AccessPointName</name>
<SSIDConfig>
<SSID>
<hex>HASH</hex>
<name>AP Name</name>
</SSID>
<nonBroadcast>true</nonBroadcast>
</SSIDConfig>
<connectionType>ESS</connectionType>
<connectionMode>auto</connectionMode>
<autoSwitch>false</autoSwitch>
<MSM>
<security>
<authEncryption>
<authentication>WPA2PSK</authentication>
<encryption>AES</encryption>
<useOneX>false</useOneX>
</authEncryption>
<sharedKey>
<keyType>passPhrase</keyType>
<protected>true</protected>
<keyMaterial>xxxxxxxxxxxxxxxxxxxxxxxxx</keyMaterial>
</sharedKey>
</security>
</MSM>
</WLANProfile>
エクスポートしたXMLファイルのパスを指定し、インポートします。ただインポートしただけではパスワードなどの情報が引き継がれないようなので、パスワードはその次のコマンドで明示的に登録します。
# netsh is deprecated and may be discontinued in the future
netsh wlan add profile filename=$WIFI_PROFILE_PATH;
netsh wlan set profileparameter name=$SSID_NAME nonBroadcast=yes keymaterial=$SSID_PASSWORD connectionmode=auto;
# Restart Wi-Fi Adapter(NIC)
Disable-NetAdapter -Name $NIC_NAME -Confirm:$false
Start-Sleep -Seconds 5;
Enable-NetAdapter -Name $NIC_NAME -Confirm:$false
Proxyサーバーの設定
プロキシサーバーを設定したい場合は以下のコマンドで実行します。
# =================================
# Set Proxy Server
# =================================
[string] $PROXY_HOST="xxx.xxx.xxx.xxx"
[int] $PROXY_PORT=0000
[string] $LOCAL_ADDR="<local>"
$REG_KEY="HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings"
try {
$ignore = [System.Net.Dns]::GetHostAddresses(${PROXY_HOST}) | ? { $_.AddressFamily -eq "InterNetwork" }
Set-ItemProperty -path ${REG_KEY} ProxyEnable -value 1
Set-ItemProperty -path ${REG_KEY} ProxyServer -value "${PROXY_HOST}:${PROXY_PORT}"
Set-ItemProperty -path ${REG_KEY} ProxyOverride -value ${LOCAL_ADDR}
Set-Item -path env:HTTP_PROXY -value "http://${PROXY_HOST}:${PROXY_PORT}"
Set-Item -path env:HTTPS_PROXY -value ${env:HTTP_PROXY}
[Environment]::SetEnvironmentVariable("HTTP_PROXY", ${env:HTTP_PROXY}, [EnvironmentVariableTarget]::User)
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", ${env:HTTP_PROXY}, [EnvironmentVariableTarget]::User)
} catch {
Set-ItemProperty -path ${REG_KEY} ProxyEnable -value 0
Remove-Item -path env:HTTP_PROXY
Remove-Item -path env:HTTPS_PROXY
[Environment]::SetEnvironmentVariable("HTTP_PROXY", "", [EnvironmentVariableTarget]::User)
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", "", [EnvironmentVariableTarget]::User)
}
$source=@"
[DllImport("wininet.dll")]
public static extern bool InternetSetOption(int hInternet, int dwOption, int lpBuffer, int dwBufferLength);
"@
$wininet = Add-Type -memberDefinition ${source} -passthru -name InternetSettings
${wininet}::InternetSetOption([IntPtr]::Zero, 95, [IntPtr]::Zero, 0)|out-null
${wininet}::InternetSetOption([IntPtr]::Zero, 37, [IntPtr]::Zero, 0)|out-null
7. Windowsの機能利用設定
OpenSSHの有効化
OpenSSH4クライアントおよびOpenSSHサーバーは、Windows Server 2019とWindows 10 1809に個別にインストール可能なコンポーネントです。
以下のコマンドを実行することにより、SSH ClientとServerを有効化できます。
# =============================
# Install & Enable Open SSH
# =============================
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
# Install the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
# Start sshd
Start-Service sshd
# OPTIONAL but recommended:
Set-Service -Name sshd -StartupType 'Automatic'
# Confirm the Firewall rule is configured. It should be created automatically by setup.
Get-NetFirewallRule -Name *ssh*
# There should be a firewall rule named "OpenSSH-Server-In-TCP", which should be enabled
# If the firewall does not exist, create one
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
(Windows Server 2019 および Windows 10 用 OpenSSH のインストール)
UWFの有効化
Windows 10 EnterpriseやWindows 10 IoTなどには搭載されている機能であるUWF(統合書き込みフィルター処理)を有効化するには以下のコマンドを実行します。
Dism /online /Enable-Feature /FeatureName:Client-DeviceLockdown;
Dism /online /Enable-Feature /FeatureName:Client-UnifiedWriteFilter;
echo "UWFをCドライブに対して有効化します。"
uwfmgr volume protect C:
uwfmgr filter enable
参考
- Qiita, PowerShell 使い方メモ
- Qiita, PowerShellの実行ポリシー変更
- Qiita, PowerShellでネットワークアダプタの設定変更
- Qiita, WindowsのWi-Fi操作をコマンドプロンプトから行う
- Microsoft, PowerShell Windows 10 and Windows Server 2016