Back
Featured image of post Powershellコマンドの個人的まとめ

Powershellコマンドの個人的まとめ

Windows Powershellのヒント集

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

参考


  1. サーバー版ではないWindowsのこと(Windows HomeやPro) ↩︎

  2. Network Interface Card ↩︎

  3. Dynamic Host Configuration Protocol(TCP/IPネットワークにおいてホストに設定情報を伝達するための仕組み) ↩︎

  4. 2018年4月のWindows10アップデートでOpenSSHが正式に組み込まれるようになった ↩︎

comments powered by Disqus
yuu999
Built with Hugo
Theme Stack designed by Jimmy