AWS EC2 Windowsで壁紙にインスタンスの情報が表示されなくなった場合の対処

AWS EC2 Windowsで壁紙にインスタンスの情報が表示されなくなった場合の対処について記載します。

1.管理者としてPowerShellを起動し、以下のコマンドを実行

Import-Module "C:\ProgramData\Amazon\EC2-Windows\Launch\Module\Ec2Launch.psd1"
Get-ChildItem $env:LOCALAPPDATA -filter ec2Wallpaper*.jpg | Remove-Item
Clear-Wallpaper
Set-Wallpaper
New-WallpaperSetup

2.以下のファイルを作成(コマンド実行時に削除されるので、ベースの壁紙を置いておく)
C:\Users\Administrator\AppData\LocalEc2Wallpaper.jpg

Windows イベントログのCSVエクスポート

WindowsのイベントログをCSVでエクスポートする要件が出たので、PowerShellのGet-EventLogでエクスポートを考えていたのですが、Message部分に改行が含まれて、1イベントで1行になってくれないため、後々集計しづらくなってしまう。
それを避けるため、「PsTools」の「PsLogList.exe」を使って実現しました。

使い方

PsToolsをダウンロードし、解答すると以下のexeファイルが展開されるので、以下のように実行する。

PsLogList.exe system -s >> EventLog_System.csv

・オプション
-s:このスイッチを指定すると、PsLogList では、イベント ログのレコードを 1 行に 1 つずつ出力します (区切り記号にはコンマを使用します)。この形式は、文字列を検索する場合 (例、psloglist /i <文字列>、findstr /i <文字列>) や出力を Excel ブックにインポートする場合に便利です。

ダウンロード

PsLogList

Windows 10 で MySQL ODBCドライバ(64bit版)のインストールエラー

Windows 10 に64bit版のMySQL ODBCドライバのインストールをすると、以下のエラーが表示される

エラーメッセージ
Error 1918,Error Instaling ODBC driver MySQL ODBC 8.0 ANSI Driver, ODBC error 13: システムエラーコード126: 指定されたモジュールが見つかりません。…\myodbc8S.dll) のために、MySQL ODBC 8.0 ANSI Driver ODBC ドライバーのセットアッププログラムを読み…

https://dev.mysql.com/downloads/connector/odbc/

解決策

以下のサイトから最新版(現時点ではVS2019)の「Visual Studio 2019 の Microsoft Visual C++ 再頒布可能パッケージ」をダウンロードしインストールします。

https://visualstudio.microsoft.com/ja/downloads/

Windows Remote Management(WinRM)設定

Windows 環境においてAnsibleのようにリモートから対象サーバのコマンドやスクリプトを実行するためにWindows Remote Management(以下WinRM) を利用して実行する方法を記載します。
※ここではWindowsファイアウォールなどのネットワーク設定は割愛します。

準備(接続先サーバ)

Powershell(管理者として実行)から以下のコマンドを実行しサービスを有効化します。
詳細なオプションはこちらを参照

Enable-PSRemoting -Force

準備(接続元サーバ)

Powershell(管理者として実行)から以下のコマンドを実行し接続先ホストを許可します。ここでは *(アスタリスク) を指定しています。(どこでも接続可能)

Set-Item WSMan:\localhost\Client\TrustedHosts * -Force

接続方法

「Enter-PSSession」コマンドで接続できることを確認します。
資格情報を入力するダイアログが表示されますので、接続先のユーザー/パスワードを入力します。

$credential = Get-Credential
接続先資格情報を入力
Enter-PSSession -ComputerName <HOSTNAME> -Credential $cred

サンプルスクリプト

スクリプトでバックグラウンドで実行する場合は、資格情報をファイルに暗号化した状態で保管しておくと良いかと。
Powershellでのパスワードをセキュア ストリングファイルとして保存する方法はこちらを参照

#パスワードファイルを読み込み
$pass       = Get-Content <FILENAME> | ConvertTo-SecureString

#復号化
$credential = New-Object System.Management.Automation.PSCredential "<USERNAME>",$pass

#リモートホストの資格情報とコマンドを指定
Invoke-Command <HOSTNAME> -credential $credential -ScriptBlock { C:\tools\run.ps1 }

必要となる権限やポートについて

Administratorであればデフォルトのまま接続可能ですが、AdministratorやAdministratorsの権限を付与したくない場合、以下のグループへ参加することにより必要最小限の権限で接続できます。

またネットワークで接続する場合はポートは以下のとおりです。

HTTP: 5985/tcp
HTTPS:5986/tcp

https://support.microsoft.com/ja-jp/help/2019527/how-to-configure-winrm-for-https

参考

http://www.vwnet.jp/Windows/PowerShell/2018020501/ConnectRemotePS6.htm
https://yomon.hatenablog.com/entry/2015/03/30/133450

PowershellでのActiveDirectoryドメイン参加

Windows 7以降のPCにて、Active Directoryへのドメイン参加コマンドを探してみた。
Windows Vista以前では、netdomコマンドなどがあったり、Windows 7以降でもwmic.exeや、VBSからのドメイン参加もできました。

しかし、VBSやwmic.exeだと、パスワードの入力のところがどうもマスクづらかったりしたので、Powershellで検討してみました。

使ったコマンドレット

Add-Computer

注意事項

以降のコマンドを実行する場合は、Powershellを「管理者として実行」しておく必要があります。
f:id:red9999:20140624003634p:plain:w200

ドメイン参加

シンプルにドメイン参加するだけであれば、以下のコマンドを実行し、権限のあるユーザー情報を入力する。

# Add-Computer -DomainName ドメイン名 -Credential Get-Credential

OUを指定する場合

ドメイン参加後にOUを移動するのが面倒な場合、参加と同時にOUを指定することができる。

# Add-Computer -DomainName ドメイン名 -OUPath 'OU=階層2,OU=階層1,DC=hogehoge,DC=local' -Credential ドメイン名\ユーザー名

バッチ実行する場合

バッチファイルに以下のように記載し、右クリックから「管理者として実行」することにより、管理者でコマンドが実行できます。
f:id:red9999:20140624005120p:plain:w200

# Powershell -Command $cred = get-credential; Add-Computer -DomainName ドメイン名 -OUPath 'OU=階層2,OU=階層1,DC=hogehoge,DC=local' -Credential $cred

今回はあえて都度資格情報を入力できるように作りました。
セキュリティ的に気にしなければ、パスワード埋め込みも簡単にできると思います。

WordPress.com Blog.

ページ先頭へ ↑