院長のメモ帖
2013年10月17日 木曜日
キャノンのプリンタードライバーとPC管理者
先日、インクジェットのFAX複合機が紙詰まりを起こした後、印刷がかすれるようになって、メーカー修理対象になってしまったので、新品に買い換えました。新しい機種はキャノンのPixus MX923ですが、ドライバーインストールに少しはまりました。
インストールCDからセットアッププログラムの"\MSETUP4.EXE"をダブルクリックすると、UAC画面が出て管理者権限が要求されますが、OKを押すと以下のように
「ソフトウェアをインストールするためには、管理者のアカウントとしてログオンしている必要があります。」というエラーが出て目が点になりました。
この時ログインしていたアカウントはドメイン管理者で、その権限はローカルPCの管理者権限ももれなくついてきているわけで、UAC画面も経由しているのに何の権限が足りないんだ!と混乱してしまいました。
別のPCで試しても同じでどういうこと?と思いましたが、ふと、ローカルPCのAdministoratorグループにアカウントを登録してみたところすんなりセットアップできました。要するにメッセージの通り明示的にローカルPCの管理者なってるかどうか確認していたんですね。
この仕様は、はっきり言っておかしいですね。セキュリティに穴をあけることを要求していますよね。ログインはユーザー権限、必要な時だけAdministoratorに昇格することをマイクロソフトが推奨しているわけですから。この標準に合わせて、権限の確認だけにしてほしいものです。
2013年10月 7日 月曜日
WS2012R2の再起動時にVMがオフになる その2
前回報告した、Windows Server 2012R2のVMがホスト再起動・シャットダウン時に正常シャットダウンせず電源Off状態になる不具合は、MicrosoftのWinodws Server Forumでも報告されていて、現時点で解決策はなさそうです。しょうがないので、以下のようなpowershellスクリプトを作ってしのいでいます。
# HyperVホスト再起動スクリプト
# Arg1 再起動するホスト。指定しない場合はローカルPCを再起動する。
$WaiToKillTime = 180
if (!([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
write-host "実行には管理者特権が必要です。"
exit
}
if ($args.Length -eq 0) {$comp = $env:COMPUTERNAME} else {$comp = $args}
$VmAll = Get-VM -ComputerName $comp
write-host Target:$comp
if ($VmAll.Count -eq 0)
{
Write-Host "VMが存在しないので処理をキャンセルします。"
}
else
{
#起動していないVMは、次回起動しない。
$VmAll | where state -NE Running | where AutomaticStartAction -NE Nothing | set-vm -AutomaticStartAction Nothing
$vms = $VmAll | where state -EQ Running #起動しているVM
$vms | Stop-VM -AsJob #非同期で停止
$vms | where AutomaticStartAction -NE Start | set-vm -AutomaticStartAction Start #次回起動するようマーク
#VMがすべてシャットダウンするかタイムアウトするまで待つ
for ($i = 1; $i -lt $WaiToKillTime; ++$i)
{
$vs = Get-VM -ComputerName $comp | where state -EQ Running
if ($vs.count -eq 0) { break}
$vs | select name | ft
start-sleep -s 1
}
Restart-Computer -ComputerName $comp -Force #ホストのリスタート開始
}
このスクリプトでは、現在実行中のVMの「自動開始アクション」を「常に開始に」、実行していないVMは「何もしない」に変更し、実行中のVMをシャットダウンします。
続いて、全VMがシャットダウンするかタイムアウト(180秒)するまで待ってから、ホストコンピューターを再起動させます。
とりあえず、Windows Updateを手動にしてこのスクリプトで再起動させてしのいでいますが、10/17の正式発売日には修正されているんでしょうか。今回Win8.1とWin2012R2のRTMがMSDN/TechNetにいったんは提供されないと発表されたのは、実はまだ開発中で本来のRTMの水準に達していなかったからではないかと疑ってしまいます。とにかく不振のWin8を立て直すためにWin8.1の発売を延期することは考えられなかったので、ぎりぎりまで修正を続けて、発売日には結構な数の修正プログラムがWindows Update経由で提供されるんじゃないでしょうか。
# HyperVホスト再起動スクリプト
# Arg1 再起動するホスト。指定しない場合はローカルPCを再起動する。
$WaiToKillTime = 180
if (!([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
write-host "実行には管理者特権が必要です。"
exit
}
if ($args.Length -eq 0) {$comp = $env:COMPUTERNAME} else {$comp = $args}
$VmAll = Get-VM -ComputerName $comp
write-host Target:$comp
if ($VmAll.Count -eq 0)
{
Write-Host "VMが存在しないので処理をキャンセルします。"
}
else
{
#起動していないVMは、次回起動しない。
$VmAll | where state -NE Running | where AutomaticStartAction -NE Nothing | set-vm -AutomaticStartAction Nothing
$vms = $VmAll | where state -EQ Running #起動しているVM
$vms | Stop-VM -AsJob #非同期で停止
$vms | where AutomaticStartAction -NE Start | set-vm -AutomaticStartAction Start #次回起動するようマーク
#VMがすべてシャットダウンするかタイムアウトするまで待つ
for ($i = 1; $i -lt $WaiToKillTime; ++$i)
{
$vs = Get-VM -ComputerName $comp | where state -EQ Running
if ($vs.count -eq 0) { break}
$vs | select name | ft
start-sleep -s 1
}
Restart-Computer -ComputerName $comp -Force #ホストのリスタート開始
}
このスクリプトでは、現在実行中のVMの「自動開始アクション」を「常に開始に」、実行していないVMは「何もしない」に変更し、実行中のVMをシャットダウンします。
続いて、全VMがシャットダウンするかタイムアウト(180秒)するまで待ってから、ホストコンピューターを再起動させます。
とりあえず、Windows Updateを手動にしてこのスクリプトで再起動させてしのいでいますが、10/17の正式発売日には修正されているんでしょうか。今回Win8.1とWin2012R2のRTMがMSDN/TechNetにいったんは提供されないと発表されたのは、実はまだ開発中で本来のRTMの水準に達していなかったからではないかと疑ってしまいます。とにかく不振のWin8を立て直すためにWin8.1の発売を延期することは考えられなかったので、ぎりぎりまで修正を続けて、発売日には結構な数の修正プログラムがWindows Update経由で提供されるんじゃないでしょうか。