ラベル Tips の投稿を表示しています。 すべての投稿を表示
ラベル Tips の投稿を表示しています。 すべての投稿を表示

2013/04/19

Windows7 USBメモリ不可設定

USBメモリの利用不可設定の方法はいくつかあるが、
僕はグループポリシーよりも いろいろカスタマイズができるスクリプトを利用した制御のほうが
好き

@IT USB大容量記憶装置ドライバを無効にする
http://www.atmarkit.co.jp/fwin2k/win2ktips/629usb2/usb2.html

上記に書かれている通り、
KEY_LOCAL_MACHINEのSYSTEM\CurrentControlSet\Services\USBSTOR の
Start の値を4に変更するとUSBメモリを指しても認識しなくなる。

ただし、新しいメモリを刺した場合、USBメモリのドライバを取ってくるときに、上記のレジストリはクリアされ、(値が3に戻る)再び利用可能となってしまう。

対応方法として、%SystemRoot%\inf\ 配下の以下の2つのファイルのアクセス権を無効にする必要があるらしい
UsbStor.inf
UsbStor.pnf

ただ、僕のWindows7環境では上記のアクセス権を無効にしても、相変わらずドライバはインストールされ続け、USB利用も可能になってしまった。なので以下のファイルのアクセス権を無効にした。
C:\Windows\System32\DriverStore\INFCACHE.1

上記ファイルのSystem、Everyoneのアクセス権をフルコントロールで拒否することで、
ドライバのインストールは試みるものの失敗するようになり、USBメモリを利用できない動きが確認できた。

あとはどのように上記アクセス権を変更するかだが、
Windows7の場合icaclsコマンドがあるので、それを利用する。
ただし、そのままアクセス権変更を実施してもUACが邪魔するので、解除した上で実行する必要がある。
また、一般ユーザーでは変更権限をもたないので、GPOのスタートアップスクリプトを利用して展開するのが理想。

以下、スクリプト
nonusb.vbs
<# 


On Error Resume Next
'listがoffの場合には、'System権限、Users権限をなくすスクリプト。
'スタートアップによる実施が必要

Dim objWMI, objShell, osInfo, os
Dim objWsh, objNetwork, objFS, objTS
Dim CompName, objFile, host

Set objWsh = WScript.CreateObject("WScript.Shell")
Set objNetwork = WScript.CreateObject("WScript.Network")
Set objFS = WScript.CreateObject("Scripting.FileSystemObject")

' Vistaかどうかチェックし管理者権限に昇格させる
do while WScript.Arguments.Count = 0 and WScript.Version >= 5.7
    Set objWMI = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set osInfo = objWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem")
  
    For Each os in osInfo
        If left(os.Version, 3) < 6.0 Then exit do
    Next
    
    ' 引数付きでwscriptを管理者権限で再実行
    Set objShell=CreateObject("Shell.Application")  
    objShell.ShellExecute "wscript.exe", Chr(34) & WScript.ScriptFullName & Chr(34) & " uac","","runas",1
    WScript.Quit
loop


CompName =  objNetwork.ComputerName   'コンピュータ名を変数に保存
objFile = "usblist.txt"
Set objTS = objFS.OpentextFile(objFile)


Do Until objTS.AtEndOfStream
 List = objTS.readline
' WScript.Echo host
'カンマで区切ったものを配列に入れる
 List_Item = Split(List,",")
 Host = List_Item(0)
'大文字、小文字の両方で利用可能にする
 oomoji = Ucase(Host)

 If host = CompName OR oomoji = CompName Then

  Select Case List_Item(1)

  Case "ON","on"
   objWsh.Run("cmd /c icacls C:\Windows\System32\DriverStore\INFCACHE.1 /reset")
   objWsh.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR\Start", "3","REG_DWORD"
  Case "OFF","off"
   objWsh.Run("cmd /c takeown /F C:\Windows\System32\DriverStore\INFCACHE.1 /A")
   WScript.sleep(100)
   objWsh.Run("cmd /c icacls C:\Windows\System32\DriverStore\INFCACHE.1 /inheritance:d")
   WScript.sleep(100)
   objWsh.Run("cmd /c icacls C:\Windows\System32\DriverStore\INFCACHE.1 /deny system:F /deny users:F /deny everyone:F")

   objWsh.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR\Start", "4","REG_DWORD"

  End Select

 End If
Loop

usblist.txtを用意し、
PC名,off
PC名,on
と書かれたリストを用意し、任意のPCがonの場合はUSB利用許可、offの場合は不可となるようにする。


2012/12/08

VMWarePlayerのデータをESXi上へ移行

VMWarePlayer上の仮想マシンをESXiに移してみます。
ボリュームへ直接アップロードする方法も試してみたのですが、ESXiでの起動時にSCSIエラーが出て
うまく起動できなかった為、VMWare社がだしている変換ソフトを使用してみます。

VMWare vCenter Converter
https://my.vmware.com/group/vmware/evalcenter?p=converter

通常のインストールに加え、サーバ・エージェント方式での利用も可能なようです。
image
とりあえず今回は通常のローカルインストールをおこないました。

image
起動画面。

image
マシンの変換をクリック

image
変換するソースの指定画面が出る。
今回はVMWarePlayerなので、「VMWare Workstation またはその他のVMWare 仮想マシン」を選択した。

image
つづいて変換先のターゲットを指定。今回はESXiサーバを指定。

image
ESXiサーバの現在の保持している仮想マシン名などが出る。

image
続いて 仮想ディスクの保存先を指定。

image
最後にオプション画面で、細かく設定変更を行うことができる。

image
すべて設定を終えて進むと、ジョブが走りだす。

ウィザード形式でとっても扱いやすかったです。
VMWare製品の変換のみならず、物理マシンの仮想化、
Hyper-VやVirtualPCのデータも変換してくれるようです。
image
無事、VMWarePlayerの仮想マシンがESXi上で動くようになりました。

2012/11/04

ログをメーターとして表示させるPowerShellスクリプト


ってことで、下のようなsample.txtがあったとして・・

こんな感じで出力させます。

というわけで以下、ソース

2011/09/09

長月3.プログラムの実行回数を出力させる仕組みをみてみる3

前回の続きです。

長月1.プログラムの実行回数を出力させる仕組みをみてみる
http://win-enikki.blogspot.com/2011/09/1.html
長月2.プログラムの実行回数を出力させる仕組みをみてみる2
http://win-enikki.blogspot.com/2011/09/1_05.html

前回、最後にスクリプト付け加えました。
これは最終実行時間と、できたデータをオブジェクトに入れる処理です。

#レジストリプロパティを入力、時間を出力
function convtime($x) {
    $LittleEndianTime=$x[60..67] | % { $_.tostring("x2") }
    $BigEndianTime=$null
    $($LittleEndianTime.count-1)..0 | % { $BigEndianTime += $LittleEndianTime[$_] }
 
    $filetime=[convert]::ToInt64("$BigEndianTime", 16)
    [datetime]::fromfiletime($filetime)
}
 
#オブジェクトに各データを入れデータ格納
$result = $iname | % {
    $count = $iProp.$_[4]
    if ($count -ne 0){
        $output = New-Object psobject
        $output | Add-Member noteproperty pcount $iProp.$_[4]
        $output | Add-Member noteproperty pname $(func $_)
        $output | Add-Member noteproperty ptime $(convtime $iprop.$_)
        $output      
    }
}
 
#お好みでオブジェクト整形
$result | sort-Object -Property ptime -Descending

この処理はだいたい以下のような動きをさせている

2011/09/05

長月2.プログラムの実行回数を出力させる仕組みをみてみる2

前回の続き

長月1.プログラムの実行回数を出力させる仕組みをみてみる
http://win-enikki.blogspot.com/2011/09/1.html

では、残りのスクリプトをみていきます。

$iName | %{
    $count = $iProp.$_[4]
   
    if ($count -ne 0){
        "{0}回 {1}" -f $count, (func $_)
    }
}

プログラム名が記述されている$iName、
そのプログラムの実行回数を含む各種データが格納されてある$ipropを利用して、回数を表示させる。

では、そもそも$ipropに書かれているデータ構造はどうなっているのだろう?
$iPropに格納されているのは、以下のレジストリキーをカスタムオブジェクトとして取得し、
データを各プロパティ値として取得している。
HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}\Count

レジストリエディターでキーをみたところ

2011/08/30

葉月1.PowerShellのプロファイルとSyncToyを利用したバックアップ

僕が使っているのは、MSが出しているSyncToyというツール。
これを利用するとフォルダ間でファイル同期を行ってくれる。手軽に使えるのでなかなか良い

SyncToy

@IT SyncToyツールで手軽にバックアップを行う

コマンドプロンプトでも実行できるので、USBメモリをさした場合にプロファイルを読み込み、
その過程で上記ソフトを実行するよう設定する。

2011/06/27

水無月2.リモートデスクトップ接続のセッション確認2

前回、query sessionコマンドを利用した別サーバのセッション確認の記事を書きましたが、
山市さんのえぬなんとかわーるどで、PowerShellによるセッション確認についての記事がありました

リモート デスクトップ セッションの RDP バージョンを調べる方法 by PowerShell
http://yamanxworld.blogspot.com/2011/06/rdp-by-powershell.html

以下にあるモジュールをダウンロードし、モジュールを読み込むことで、
リモートデスクトップセッション確認、さらには接続ユーザーへメッセージを送ったりプロセスを停止させるコマンドレットを使うことができるようになります。

Terminal Services PowerShell Module 
http://psterminalservices.codeplex.com/

query sessionではせいぜいユーザー名や状態の出力くらいですが、
上記のモジュールを読みこむことで使用可能となる、Get-TSSessionはLoginした時間や接続したクライアントなど多岐にわたる情報が出力されます。

さらに、PowerShellであるため色々な応用が可能となります。
一定時間接続したユーザーに対してメッセージやログオフ処理を走らせたり、特定の端末が接続した場合のみ特殊な処理を実行させる、、ということもできそうです。
セッションの情報はRemoteAppで接続した場合でもきちんと出力されましたし、色々趣向をこらせそうですね。

では実際にやってみます。まず、モジュールを読み込み。


2011/06/18

水無月1.リモートデスクトップ接続のセッション確認

今、VDIの記事でも描こうかなぁと、検証中。
でも、その前にTipsなぞ。

まずはリモートデスクトップサービス(RDS)のおさらい
リモートデスクトップ機能概要
http://www.microsoft.com/japan/windowsserver2008/r2/technologies/rds.mspx

RDSは最近は、マルチメディアやプリンタのリダイレクトやAeroグラスのサポートなどもしています。
RDSの中でもいちばんスタンダードなリモートデスクトップ接続についてですが
遠隔からサーバを管理したり、PCに接続し動作させることなどができます。

@IT  リモート・デスクトップでコンソール・セッションに接続する
http://www.atmarkit.co.jp/fwin2k/win2ktips/519rdcons/rdcons.html

上記の記事にはこうあります。
リモート・デスクトップで接続すると、それぞれの「セッション」ごとに固有のユーザー環境が用意される。セッションとは、ユーザーごとに用意される画面やキーボード、プロセス空間などの環境へ接続した状態のことを指す。リモートからログオンしたユーザーに対しても仮想的なコンピュータ環境が用意され、実際の物理コンソールの状態には関係なく、独立してコンピュータを利用できる。実際の物理的なコンソールから利用しているセッションのことを特に「コンソール・セッション」といい、リモートから接続しているセッションのことを「リモート・セッション」という。
セッションは、Windows XP Professionalでは同時に1セッションのみが利用でき、Windows Server 2003/Windows Server 2008の「管理用リモート デスクトップ」モードでは、同時に最大3セッション(1コンソール・セッション+2リモート・セッション)まで利用できる。
本来、サーバに接続する場合にはライセンス(RDSCAL)が必要なのですが、3セッションまでは管理用として接続が許可されているわけです。
WindowsServer2008以降ではデフォルト設定では、アカウント1つに付き同時に1つのセッションだけの利用しかできないため、複数の管理者が同一アカウントで接続しようとした場合、作業中にいきなり画面が落ちてしまう(セッションがとられてしまう)場合があったりします。
さて、そんなことにならないよう、現在のセッションの状態を調べたい場合に "query session"コマンドがあります。

2010/08/18

ActiveDirectoryでの監査ポリシーを考えてみる

ADを運用していると、
オブジェクトの変更をしたりログイン・ログオフしたときの様々なログを取得したいーという要望があります。
そんな時は、ADによる 監査ポリシーを使用するという手段がありました。
しかし、監査ポリシーの使用は精度があまり高くない、使いにくいという話もちらほら聞こえたりしていて
結局積極的に使用を控えていました。
しかし、2008R2Serverも浸透している現在、少し立ち戻って本当に使えないのか少し検証してみたいと思います。

・監査ポリシーとは
Technet 監査ポリシー
http://technet.microsoft.com/ja-jp/library/cc730601%28WS.10%29.aspx
上記にあるように、GPOによる設定で様々な「監査」を実施することで、セキュリティログへ情報を書き出します。
設定できる監査項目は以下のとおり。
http://technet.microsoft.com/ja-jp/library/cc787176%28WS.10%29.aspx
---
http://technet.microsoft.com/ja-jp/library/cc787567%28WS.10%29.aspx

---
http://technet.microsoft.com/ja-jp/library/cc737542%28WS.10%29.aspx

---
http://technet.microsoft.com/ja-jp/library/cc776774%28WS.10%29.aspx
---
http://technet.microsoft.com/ja-jp/library/cc728087%28WS.10%29.aspx
---

残り4つの監査項目はまた次回。
監査ポリシーの問題点や、チューニングについてもおいおい調べていきたいと思ってます。

2010/08/09

DISMコマンド

DISMコマンドは7には標準搭載されているコマンドですが、色々できるようです。


WindowsTips
新しい DISM ツールを使用して Windows イメージを準備およびサービスする
http://technet.microsoft.com/ja-jp/windows/ee183884.aspx



COMPUTERWORLD BLOG
VHD のオフラインパッチ by DISM
http://blog.computerworld.jp/2010/08/09/offlinepatch-by-dism/

@IT
Windows 7/Windows Server 2008 R2のコンポーネントをdismコマンドで管理する
http://www.atmarkit.co.jp/fwin2k/win2ktips/1296dism/dism.html

な○の 屋
WinPE 3.0 ( Windows AIK for Windows 7 )
http://yuichi.tea-nifty.com/blog/2009/08/winpe-30-window.html

Windows 7 エンタープライズ ショート ビデオ
How Do I: Deployment Image Servicing and Management (DISM)?
http://technet.microsoft.com/ja-jp/windows/dd320284.aspx

---
Dism /? でヘルプが出ます。
上記記事にあるように、適用したパッチをオフラインからアンインストールしたり、
イメージを展開することなく、更新プログラムの確認などができるようです。

まだ、イメージ展開サービスやVHDファイルを運用レベルで使ってはいないのですが、
今後使用する機会もあるかもしれないですねー