Powershellでパスワードを指定して共有ドライブをマウントする

PowerShellからパソコンの共有ドライブをユーザーIDとパスワードを指定してマウントします。

$computerName = '192.168.1.1'; # 接続先クライアントのIPアドレス
$adminPass = 'password'; # 接続時に使用するパスワード
$adminUser = 'admin'; # 接続時に使用するユーザーアカウント

# 認証情報のインスタンスを生成する
$securePass = ConvertTo-SecureString $adminPass -AsPlainText -Force;
$cred = New-Object System.Management.Automation.PSCredential "$computerName\$adminUser", $securePass;

# 共有ドライブをBドライブとしてマウントします
New-PSDrive -Name 'B' -PSProvider FileSystem -Root "\\$computerName\C`$" -Credential $cred;

# --- ここで色々処理

# Bドライブをマウント解除します
Remove-PSDrive -Name 'B';

ちなみにC$はWindowsでデフォルトで作成される共有名です。管理者権限を持つユーザーでしか開けませんが、C:ドライブ全体へのフルアクセスになっています。ここをマウントしてゴニョゴニョできると、クライアントパソコンの諸々の管理や情報収集が捗ります。

Windowsで管理者権限のユーザーアカウントにパスワード設定しないのが論外な理由は、こういう所にある。

ActiveDirectory(以下AD)を導入してたら、ADの管理者アカウントでプロセスを走らせれば、認証情報作ル必要も無くなります。New-PSDriveすら必要なく「\\192.168.1.1\c$」でアクセス出来るので、こんなKnow Howいらないんだけどね。

UI Automation PowerShell Extensionsを使ってみる

単票入力画面で入力効率アップのための工夫が一切無く、ほぼ同じ内容を何度も入力するという非人間的な作業に追われている事務担当者というのは、私以外にも結構居るかと思う。清く正しいエンジニア兼業事務担当者としては、ここは自動化すべきだろう。というわけで、PowerShellとUI Automation PowerShell Extensionsを使って作業の自動化を試みるよ。

UI Automation PowerShell ExtensionsはVisual Studioで開発されたアプリケーション画面のテストを自動化するために提供されているMicrosoft UI AutomationをPowerShellから呼び出せるようにしたものです。

UI Automation PowerShell Extensionsには残念な制約があって、Powershell Version 2.0でないと動きません。もしより高いバージョンのPowershellが既にインストールされている場合は”powershell -version 2″とコマンドライン引数を指定して、低いバージョンで起動する必要があります。また動作には管理者権限が必要です。管理者権限を持つユーザーでログインするのは当然として、UACを有効にしている場合は「管理者として実行」を選択する必要があります。

まずはUI Automation PowerShell ExtensionsからUIAutomation.x.x.xxx.NET35.zipをダウンロードします。ダウンロードしたZIPファイルに含まれているファイルを適当なフォルダに解凍します。ここでは「C:\Program Files\WindowsPowerShell\Modules」に「UIAutomation」というフォルダを作ってそこに解凍することにします。

とりあえずコマンドプロンプトからメモ帳を起動して実験してみましょう。

PS C:\Windows\system32> Import-Module "C:\Program Files\WindowsPowerShell\Modules\UIAutomation\UIAutomation.dll"
PS C:\Windows\system32> notepad
PS C:\Windows\system32> $window = Get-UiaWindow -Name '無題 - メモ帳'
PS C:\Windows\system32> $window.Keyboard.TypeText("Hello UI Automation")

メモ帳を起動して適当な文字列を入力することが出来ました。
notepad-sample

実際にScriptを作るにはUIAutomationSpy.exeと言うプログラムが付属しています。これを起動して一連の操作を行うと、その操作をScriptに保存する事が出来ます。
UIAutomation
UIAutomationSpy.exeを起動してStartボタンをクリックした後、Scriptにしたい一連の操作を実施し、Stopボタンをクリックします。Scriptタブに移動すると先ほどの操作を再現するためのScriptが生成されています。これをテキストエディタに張り付けて、Powershell Scriptとして保存します・・・が、この自動生成されるScriptはかなり汚いので実際に利用の際には大幅に修正する事になります。例えば先ほどのメモ帳に入力するサンプルも自動生成したScriptだとこうなります。

Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | `
Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'H'

Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | `
Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hell'

Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | `
Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello '

Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | `
Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello U'

Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | `
Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello UI A'

Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | `
Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello UI Au'

Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | `
Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello UI Automati'

Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | `
Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello UI Automation'

・・・(´・ω・`)
「AutomationId」とかClassを調べるためのツールと割り切った方が良さそうですね。

Windows7でWindows PowerShellからタスクを追加するには

Windows7でWindows PowerShellからタスクを追加するにはschtasks.exeを呼び出す以外にないらしい。

Windows PowerShellでタスクの設定を追加するにあたって、Scheduled Tasks Cmdletsを使いたかったのだけど、現状ではWindwos 8.1とWindows 2012 R2以降でしかサポートしません。

昔はWindows7でも後からインストールできた用で、PowerShell V2.0の場合はPowerShell Packをインストールすることで、PowerShell V3.0であれば標準でタスクスケジューラの制御の為のScheduledTask Cmdletを提供していたようです。現在ではPowerShell Packもダウンロード出来ません。最新のPowerShell V4.0ではWindows8.1以降かWindows 2012R2以降でなければScheduled Tasks Cmdletsをサポートしないので仕方ありませんね