Quantcast
Channel: VMware Communities : Blog List - All Communities
Viewing all articles
Browse latest Browse all 3135

PowerShell cmd

$
0
0

PowerShellスクリプト(ps1)の実行を許可するには

Windows PowerShell スクリプトを実行する


> Set-ExecutionPolicy RemoteSigned

set-execpol.png

 

 

取得した情報を変数として引き渡すには、|(パイプ)と()を使う

Windows PowerShell の機能

 

 

if と switch

Windows PowerShell If Statement. Also 'Else and 'ElseIf' constructions

Windows PowerShell - Switch Statement Examples


特定のファイルが存在しているかどうかで処理を分岐させる

ファイルやフォルダが存在するかを確認する方法[PowerShell] : バヤシタ


標準出力とエラー出力、リダイレクトのまとめ

http://www.itlab51.com/?p=5595

 

 

 

about_WQL

https://technet.microsoft.com/ja-jp/library/jj679341.aspx

WQL は、Windows Management Instrumentation (WMI) のクエリ言語であり、WMI から情報を取得するために使用します。

WQL を使用するために必要な基本的な WQL ステートメントは、Select、Where、および From です。


Get-WmiObject で使用できる WQL クエリは、すべて Get-CimInstance でも使用できます。


Windows PowerShell 3.0 で導入された CIM コマンドレットは、WMI コマンドレットと同じタスクを実行します。CIM コマンドレットは、WS-Management (WSMan) 標準と Common Information Model (CIM) 標準に準拠しています。

そのため、コマンドレットは、Windows コンピューターと他のオペレーティング システムを実行しているコンピューターを、同じ手法で管理できます。

Get-WmiObject は ManagementObject を返しますが、Get-CimInstance は CimInstance オブジェクトを返します。ただし、どちらのオブジェクトも非常に似ています。


Wmi-Object と CimInstance は同じように使えるが、 CimInstance のほうが新しく作られた汎用的なコマンドレット・・・かな?

Get-WmiObject または Get-CimInstance で、-ClassName と -Property のパラメータを指定する場合と、-Query で WQL を使用する場合は得られる結果にあまり違いがない。

ClassName が Win32_UserAccount のような、値の件数が多いケースで必要な項目の値だけを取得したい場合は、-Query や -Property で項目を指定するのではなく、

取得した値(のリスト)をパイプでSelectに引き渡してた方が、不要な項目名が無い状態で値を取得できる。(最後の実行例)

PS C:\Windows\system32> Get-CimInstance -ClassName Win32_Bios


SMBIOSBIOSVersion : L01 v02.53

Manufacturer      : Hewlett-Packard

Name              : Default System BIOS

SerialNumber      : JPA50796NS

Version          : HPQOEM - 20141020

 

PS C:\Windows\system32> Get-CimInstance -Query "Select * from Win32_Bios"

 

SMBIOSBIOSVersion : L01 v02.53

Manufacturer      : Hewlett-Packard

Name              : Default System BIOS

SerialNumber      : JPA50796NS

Version          : HPQOEM - 20141020

 

PS C:\Windows\system32> Get-CimInstance -ClassName Win32_Bios -Property Name


Status                :

Name                  : Default System BIOS

Caption              :

SMBIOSPresent        :

Description          :

InstallDate          :

BuildNumber          :

CodeSet              :

IdentificationCode    :

LanguageEdition      :

Manufacturer          :

OtherTargetOS        :

SerialNumber          :

SoftwareElementID    : Default System BIOS

SoftwareElementState  : 3

TargetOperatingSystem : 0

Version              : HPQOEM - 20141020

PrimaryBIOS          :

BiosCharacteristics  :

BIOSVersion          :

CurrentLanguage      :

InstallableLanguages  :

ListOfLanguages      :

ReleaseDate          :

SMBIOSBIOSVersion    :

SMBIOSMajorVersion    :

SMBIOSMinorVersion    :

PSComputerName        :

CimClass              : root/cimv2:Win32_BIOS

CimInstanceProperties : {Caption, Description, InstallDate, Name...}

CimSystemProperties  : Microsoft.Management.Infrastructure.CimSystemProperties

 

 

PS C:\Windows\system32> Get-CimInstance -Query "Select Name from Win32_Bios"

 

SMBIOSBIOSVersion :

Manufacturer      :

Name              : Default System BIOS

SerialNumber      :

Version          : HPQOEM - 20141020


PS C:\Windows\system32> Get-CimInstance -ClassName Win32_Bios | Select Name

 

Name

----

Default System BIOS

 

PS C:\Windows\system32> Get-CimInstance -ClassName Win32_UserAccount | select Name

 

Name

----

Administrator

Guest

H215015

QNDSYS16

___VMware_Conv_SA___

Administrator

Guest

krbtgt

SUPPORT_388945a0

melitdssadm

melitdsssys

melitdssusertemp

sysBackupexec

AD-USER01

AD-USER02

AD-USER03

 : 


※ 実行機の参加しているドメインのユーザー情報も全て取得してしまう。


 

 

WMI Class

Retrieving a WMI Class (Windows)

Win32_Account class (Windows)  グループのほう

 

Win32_UserAccount class


Win32_UserAccount の各プロパティの説明

512 は AccountType が Normal account であることを示す。

 

※  ドメイン参加PCでGet-CimInstance を実行するとドメインユーザー情報を取得してしまうので注意すること

 たぶん↓の注記はこのことを言っている?

Note  Because both the Name and Domain are key properties, enumerating Win32_UserAccount on a large network can negatively affect performance. Calling GetObject or querying for a specific instance has less impact.

GetObject はVBScriptでしか使えない。Queryでインスタンスを特定するには、以下のコマンド例のように、whare で LLocalAccount が Trure のみ抽出するよう指定すればよい。

これだと、ホスト名も影響しないので、実行サーバが変わっても大丈夫。

手元のPCでインスタンスを指定せずに実行すると 30分以上かかっていた処理が、一瞬で完了するようになった。(ADのユーザー情報を取得していないためと思われ)

本番稼動中のサーバで、万が一、ドメインに参加しているサーバだったとしても、負荷の心配なく実行できる。


PS C:\Windows\system32> get-ciminstance -query "select * from Win32_UserAccount where LocalAccount = 'true'"

 

Name            Caption                            AccountType                      SID                                Domain

----            -------                            -----------                      ---                                ------

Administrator    DSP-PC2081\Administrator            512                              S-1-5-21-2989615179-323239334-30... DSP-PC2081

Guest            DSP-PC2081\Guest                    512                              S-1-5-21-2989615179-323239334-30... DSP-PC2081

LocalUser01      DSP-PC2081\LocalUser01              512                              S-1-5-21-2989615179-323239334-30... DSP-PC2081

LocalUser02      DSP-PC2081\LocalUser02              512                              S-1-5-21-2989615179-323239334-30... DSP-PC2081


比較実行例: インスタンスを指定せず、QueryのフィルタやLocalAccount 以外のインスタンスの指定方法を試した場合

このコマンドの実行結果では、結果的にMIND-AD ドメインのユーザー情報は出力されないが、完了するまでに30分程度かかっているのでADユーザー情報が処理対象から除外されているわけではない。

構築中のサーバはドメイン非参加のため問題ないが、本番稼動中のサーバでは注意が必要。

 

PS C:\Windows\system32> get-ciminstance -query "select * from Win32_UserAccount where Domain like '$env:computername'" | select Name, Caption

 

Name                                                                            Caption

----                                                                            -------

Administrator                                                                  PC2081\Administrator

Guest                                                                          DSP-PC2081\Guest

LocalUser01                                                                    DSP-PC2081\LocalUser01

LocalUser02                                                                    DSP-PC2081\LocalUser02

 

 

全ユーザーの "net user" コマンド実行結果を取得する

 

取得したユーザーアカウントのリストを使って、net user コマンドを実行できるようにスクリプトを作成する。

(echo は出力結果を見やすくするため)

$UserList = Get-CimInstance -Query "select * from Win32_UserAccount where LocalAccount = 'true'"

foreach ($User in $UserList)

{

net user $User.Name;

echo "---------------------------------------"

}



net user コマンドに、ユーザー名を $_ で渡しても「このコマンドの構文は次のとおりです」となってユーザー情報が取得できない。

net user の代わりに echo $_ 等 他のコマンドで実行すると、userlist2.txt の各行をechoコマンドで表示できているが net user はダメ。

 

$dir="C:\IaaSadmin\"

 

Get-CimInstance -Query "select * from Win32_UserAccount where LocalAccount = 'true'" | Select Name > $dir"userlist.txt"

(cat C:\IaaSadmin\userlist.txt)[3..((cat C:\IaaSadmin\userlist.txt).Length-3)] > $dir"userlist2.txt"

 

cat $dir"userlist2.txt" | Foreach-Object {net user $_;echo "---------------------------------------"}

 

 

ローカル ユーザー アカウント情報の取得


PowerShellでCIM cmdletを用いて対象PCのユーザーや所属するユーザーグループを調べる - tech.guitarrapc.cóm

https://technet.microsoft.com/en-us/library/jj590758.aspx

 

Windows OS入門:第1回 ユーザーとグループアカウント (2/2) - @IT

Windowsローカルユーザーのパスワード有効期限確認用PowerShellスクリプト - YOMON8.NET



WMI と Windows PowerShell を使用してユーザーの SID を取得する方法はありますか

 

後述のローカル セキュリティ ポリシーを取得するコマンドの実行結果で、ユーザー権利の割り当て等に設定されているユーザーがアカウント名ではなくSIDで出力されているため

SIDとユーザーアカウント名の紐付けのために、SIDも出力したファイルも出しておくといいかも?

 

 

Get-Content(cat)を使って、テキストファイルの任意の行を抽出する

上記方法で取得したユーザーアカウント一覧のテキストファイルから不要な先頭の3行を除いて、変数リストとして使えるようにする。

 

PowerShell/テキストファイルの指定した範囲を抽出する・Get-Content - Windowsと暮らす

PowerShell/テキストファイルの行数を取得する方法・Get-Content - Windowsと暮らす

 

get-ciminstance -query "select * from Win32_UserAccount where Domain like '$env:computername'" | select Name > $dir"userlist.txt"

(cat C:\IaaSadmin\users.txt)[3..((cat C:\IaaSadmin\users.txt).Length)] > $dir"userlist2.txt"

 

Get-CimInstance の実行結果をテキストファイルに出力し、4行目から最終行までを新しいテキストファイルに出力する。

 

 

空白行を削除

PowerShell: ◆テキストファイルから空行を取り除く

 

読み込んだファイルから空白行を除いて新しいファイルに出力する。

このとき、読み込んだファイルと同じファイル名を新しい出力ファイル名にすることはできないため、新しいファイルを出力後に不要であれば元ファイルはrmする。

 

例)

wmic SERVICE get "Name,DisplayName,StartMode,Startname,PathName,State" /TRANSLATE:NoComma /format:csv > $dir"service_b.csv"

Select-String -Pattern "\S" -Path $dir"service_b.csv" | %{$_.line} >service.csv

rm $dir"service_b.csv"

 

 

WMIC コマンド

Windows wmic command line command

WMIC - Windows Management | Windows CMD | SS64.com

サーバーの役割と機能 

Get-WindowsFeature

 

インストールされたプログラムの一覧を取得(WMIインストーラでインストールされたもののみ=プログラムと機能の一覧に表示されるもの)

get-wmiobject -class win32_product | format-list -property Name, Vendor, Version, installdate

 

https://www.petri.com/command-line-wmi-part-1

https://www.petri.com/command-line-wmi-part-3

 

 

 

ローカル セキュリティ ポリシー

secedit コマンドによるローカルセキュリティポリシーの操作 | 俺的備忘録 〜なんかいろいろ〜

どうやら、この一覧を見る限りPowerShellのコマンドレットにはグループセキュリティについて操作できるものはあっても、ローカルセキュリティポリシーについて操作するものは無いようだ。

 

一覧の取得は可能

例) コマンド実行時のカレントディレクトリにセキュリティ

> secedit /export /areas SECURITYPOLICY /cfg secedit.txt

項目名が全て英語だが、出力は一瞬で終わる。



diff

PowerShellで2つのファイルを比較する - Qiita



リモートサーバ上での操作

「クライアント側の信頼登録」

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

 

「リモート接続コマンド」

Enter-PSSession -ComputerName <HostIP or HostName> -Credential <HostIP or HostName>\<UserName>



パフォーマンスカウンタの取得

https://technet.microsoft.com/ja-jp/library/hh849685.aspx

https://technet.microsoft.com/ja-jp/magazine/ee872428.aspx

 

例)

> Get-counter -Counter "\Memory\Committed Bytes" -SampleInterval 120 –Continuous

> Get-counter -Counter "\Memory\Available MBytes" -SampleInterval 120 –Continuous

> Get-counter -Counter "\Memory\% Committed Bytes In Use" -SampleInterval 120 –Continuous

 

 

スクリプト例)

## -----------------------------------------------------------------------------------

##  Windows Server 2012 R2 設定パラメータ採取用スクリプト

##  Ver.1.1

## 【作成】2016/08/01 Shiozawa

## 【更新】2016/08/30 Shiozawa

## 【更新メモ】service.csvに出力されてしまう空白行の除外処理を追加

## -----------------------------------------------------------------------------------

 

$date=get-date -format yyyyMMdd

$hostname=hostname

$dir="C:\IaaSadmin\"+$date+"_"+$hostname+"\"

mkdir $dir

 

##############################################

# OS基本情報

##############################################

 

echo ------------ システム情報 ------------ >> $dir"osinfo.txt"

systeminfo | select-string -notmatch "KB" >> $dir"osinfo.txt"

 

echo - - - >> $dir"osinfo.txt"

echo ------------ ページファイル ------------ >> $dir"osinfo.txt"

Get-WmiObject -Class Win32_PageFileusage | Select-Object -Property Name, AllocatedBaseSize, CurrentUsage >> $dir"osinfo.txt"

 

## $(Get-ChildItem -force "c:\pagefile.sys").Length / 1048576

## pagefile.sys の作成場所が Cドライブ以外に指定されている場合はパスを修正してください。

 

echo - - >> $dir"osinfo.txt"

echo ------------ Disk ------------ >> $dir"osinfo.txt"

echo - >> $dir"osinfo.txt"

echo Cドライブ >> $dir"osinfo.txt"

fsutil volume diskfree C: >> $dir"osinfo.txt"

 

echo - >> $dir"osinfo.txt"

echo Dドライブ >> $dir"osinfo.txt"

fsutil volume diskfree D: >> $dir"osinfo.txt"

 

echo - - - >> $dir"osinfo.txt"

echo ------------ NTP設定 ------------ >> $dir"osinfo.txt"

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters" /v "NtpServer" >> $dir"osinfo.txt"

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters" /v "Type" >> $dir"osinfo.txt"

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v "MaxAllowedPhaseOffset" >> $dir"osinfo.txt

 

w32tm /query /configuration  >> $dir"osinfo.txt"

 

echo - - - >> $dir"osinfo.txt"

echo ------------ hosts ------------ >> $dir"osinfo.txt"

cat C:\Windows\system32\drivers\etc\hosts  >> $dir"osinfo.txt"

 

echo - - - >> $dir"osinfo.txt"

echo ------------ EventLog_Settings ------------ >> $dir"osinfo.txt"

echo "maxsize = 20971520 = 20480 KB" >> $dir"osinfo.txt"

echo "retention=false かつ autoBackup=false のとき ⇒ 必要に応じてイベントを上書きする" >> $dir"osinfo.txt"

echo "retention=true かつ autoBackup=true のとき ⇒ イベントを上書きしないでログをアーカイブする" >> $dir"osinfo.txt"

echo "retention=true かつ autoBackup=false のとき ⇒ LOG_MAX_ACT=イベントを上書きしない" >> $dir"osinfo.txt"

 

wevtutil gl Application >> $dir"osinfo.txt"

echo - - >> $dir"osinfo.txt"

echo --------------------------------------- >> $dir"osinfo.txt"

wevtutil gl Security >> $dir"osinfo.txt"

echo - - >> $dir"osinfo.txt"

echo --------------------------------------- >> $dir"osinfo.txt"

wevtutil gl System >> $dir"osinfo.txt"

echo - - >> $dir"osinfo.txt"

 

echo - - - >> $dir"osinfo.txt"

echo ------------ Hotfix ------------ >> $dir"osinfo.txt"

get-hotfix >> $dir"osinfo.txt"

 

 

##############################################

# ユーザーとグループ

##############################################

 

echo ------------ Local_Users ------------ >> $dir"users.txt"

 

$UserList = Get-CimInstance -Query "select * from Win32_UserAccount where LocalAccount = 'true'"

Get-CimInstance -Query "select * from Win32_UserAccount where LocalAccount = 'true'" | Select Name,SID > $dir"users.txt"

 

echo --------------------------------------- --------------------------------------- >>$dir"users.txt"

foreach ($User in $UserList)

{

net user $User.Name >>$dir"users.txt";

echo "---------------------------------------" >>$dir"users.txt"

}

 

 

echo ------------ Local_Group ------------ >> $dir"users.txt"

net localgroup >> $dir"users.txt"

echo - - - >> $dir"users.txt"

 

net localgroup Administrators >> $dir"users.txt"

echo - - >> $dir"users.txt"

echo ------------------------ >> $dir"users.txt"

net localgroup "Remote Desktop Users" >> $dir"users.txt"

echo - - >> $dir"users.txt"

echo ------------------------ >> $dir"users.txt"

net localgroup "Power Users" >> $dir"users.txt"

echo ------------------------ >> $dir"users.txt"

net localgroup "Users" >> $dir"users.txt"

 

 

##############################################

# ネットワーク

##############################################

 

echo ------------ Interface ------------ > $dir"network.txt"

netsh interface tcp show global >> $dir"network.txt"

 

echo - - - >> $dir"network.txt"

netsh interface ipv4 show interface >> $dir"network.txt"

# netsh interface ipv4 show interface Management-LAN >> $dir"network.txt"

# netsh interface ipv4 show interface Service-LAN >> $dir"network.txt"

 

echo - - - >> $dir"network.txt"

echo ------------ IPconfig ------------ >> $dir"network.txt"

ipconfig /all >> $dir"network.txt"

 

echo - - - >> $dir"network.txt"

echo ------------ Firewall ------------ >> $dir"network.txt"

netsh advfirewall show allprofiles >> $dir"network.txt"

 

echo - - - >> $dir"network.txt"

echo ------------ Route_Table ------------ >> $dir"network.txt"

route print >> $dir"network.txt"

 

 

##############################################

# 役割と機能

##############################################

 

import-module servermanager

Get-WindowsFeature | select Path,Installed | Export-Csv -Encoding Default $dir"feature.csv"

 

 

##############################################

# インストールプログラム情報

# ※ [プログラムの追加と削除]も併せて確認すること

##############################################

 

Get-WmiObject -Class Win32_Product | Select Name,Version | Format-List >> $dir"winobject.txt"

 

 

##############################################

# タスクスケジューラ

##############################################

 

schtasks /query /v /fo csv >> $dir"tasksch.csv"

 

 

##############################################

# サービス

##############################################

 

wmic SERVICE get "DisplayName,Name,PathName,StartMode,StartName,State" /TRANSLATE:NoComma /format:csv > $dir"service_b.csv"

Select-String -Pattern "\S" -Path $dir"service_b.csv" | %{$_.line} > $dir"service.csv"

rm $dir"service_b.csv"

 

 

##############################################

# 特定フォルダの内容確認

##############################################

 

# tree C:\<dir name> /f >> $dir"dir-name.txt"

 

 

##############################################

# その他

##############################################

 

echo  情報採取が終了しました。

echo  出力フォルダ:$dir

echo  必要に応じて各種情報を手動で採取/確認してください。

echo  -

echo  "コンピュータの管理 compmgmt.msc"

echo  "ローカルセキュリティポリシー secpol.msc"

echo  "サービス services.msc"

echo  -

echo  "Windows Update wuapp"

echo  "プログラムの追加と削除 appwiz.cpl"

echo  "インターネット オプション inetcpl.cpl"

echo  "グループ ポリシー gpedit.msc"

echo  -

echo  "ディスクの管理 diskmgmt.msc"

echo  "タスクスケジューラ control schedtasks"

echo  -

echo  "環境変数は、[msinfo32.exe] を起動 → [ソフトウエア環境] → [環境変数] で"

echo  "[全てを選択] → コピーしてテキストファイルに保存してください。"

 

 

## // Get-childitem env:


Viewing all articles
Browse latest Browse all 3135

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>