2016年11月30日

【PowerShell】プロセスの停止を待つ



プロセスの停止を待つには、Wait-Processを使います。

構文
Wait-Process -Name [プロセス名]

Wait-Process -Id [プロセスID]

このWait-Processを使うと、指定したプロセスが停止するまでプロンプトの受付が抑制されます。


-Name

プロセス名を指定する方法です。
PS C:\> Wait-Process -Name "notepad"

この例では、メモ帳が終了するまで待機しています。


-Id

プロセスIDを指定する方法です。

PS C:\> Wait-Process -Id 2416


-Timeout

「-Timeout」パラメータを使うと、指定した時間(秒)だけ停止するのを待つことができます。
PS C:\> Wait-Process -Name "notepad" -Timeout 30

この例では、30秒間停止を待ちます。


<関連記事>
【PowerShell】プロセスをデバッグする
【PowerShell】プロセスを開始する
【PowerShell】実行中のプロセスを取得する
【PowerShell】実行中のプロセスを停止する
【PowerShell】サービスを停止する

2016年11月29日

【PowerShell】プロセスを開始する



プロセスを開始させるには、Start-Processを使います。

構文
Start-Process -FilePath [ファイル名]


まず、一番単純な例です。
PS C:\> Start-Process -FilePath "notepad.exe"
-FilePathに「notepad.exe」を指定してメモ帳を起動しています。
ちなみにnotepad.exeはダブルコーテーションで括らなくても大丈夫です。

あと、指定するファイル名は実行ファイルじゃなくても大丈夫です。

たとえば「test.log」というテキストファイルを指定したとします。
もし、この「log」という拡張子にメモ帳が関連付けられていた場合、ちゃんとメモ帳が起動して「test.log」を開いてくれます。



次に、最大化されたウィンドウでプロセスを開始する方法です。
PS C:\> Start-Process -FilePath "notepad" -WindowStyle Maximized
-WindowStyleパラメータで「Maximized」を指定します。


-Verb

管理者として実行するには下記のようにします。
PS C:\> Start-Process -FilePath "powershell" -Verb runAs

また、-Verbを使って印刷も出来ます。
PS C:\> Start-Process -FilePath "test.log" -Verb Print


-Wait

プロセスの終了を待つ
PS C:\> Start-Process -FilePath "notepad" -Wait
「-Wait」パラメータを指定することにより起動したプロセスが終了するまでプロンプトの操作はできなくなります。


-WorkingDirectory

PS C:\> Start-Process -FilePath "test.pdf" -WorkingDirectory "C:\work"
「-WorkingDirectory」パラメータは、作業場所となるディレクトリを指定することにより、そのディレクトリにあるファイルを実行することができます。


<関連記事>
【PowerShell】プロセスの停止を待つ
【PowerShell】プロセスをデバッグする
【PowerShell】実行中のプロセスを取得する
【PowerShell】実行中のプロセスを停止する
【PowerShell】サービスを開始する

2016年11月28日

【PowerShell】実行中のプロセスを停止する



実行中のプロセスを中止するには、Stop-Processを使います。

構文
Stop-Process -Name [プロセス名]

Stop-Process -Id [プロセスID]

Stop-Process -InputObject [オブジェクト変数]


まず、プロセス名を指定する方法です。
PS C:\> Stop-Process -Name "excel"
ここでは、「excel」を指定しています。
ちなみにダブルコーテーションは無くても大丈夫です。



次に、プロセスIDを指定する方法です。


いまこのようにExcelがID:392で起動していたとします。
このプロセスを停止するには次のようにします。
PS C:\> Stop-Process -Id 392



次に、オブジェクト変数を使った方法です。


いま、メモ帳が起動していたとします。

PS C:\> $proc = Get-Process -Name notepad
PS C:\> Stop-Process -InputObject $proc
PS C:\> $proc | Where-Object {$_.HasExited}

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    226      15     3484      17060       0.06  12644  16 notepad

まず、Get-Processで名前が「notepad」のプロセスを取得して変数$procに格納します。
そして、Stop-Processの「-InputObject」で$procを指定してプロセスを停止しています。

このオブジェクト変数を使うことにより、3行目のようにHasExitedプロパティでプロセスが停止したか確認ができます。


<関連記事>
【PowerShell】プロセスの停止を待つ
【PowerShell】プロセスをデバッグする
【PowerShell】プロセスを開始する
【PowerShell】実行中のプロセスを取得する
【PowerShell】サービスを停止する

2016年11月27日

【PowerShell】実行中のプロセスを取得する



ローカルPCまたはリモートPCの実行中のプロセスを取得するには、Get-Processを使います。

構文
Get-Process -Name [プロセス名]

Get-Process -Id [プロセスID]


まず、単純にローカルPCの実行中のプロセス一覧を表示させるには下記のようにします。
PS C:\> Get-Process

結果はこのようになります。



次に名前を指定してプロセス一覧を表示させます。
たとえば、exで始まるプロセス一覧を表示させるには以下のようにします。
PS C:\> Get-Process -Name ex*

結果はこのようになります。



次にプロセスIDを指定して表示させます。
上で表示させたExcelのIDを指定してみたいと思います。
PS C:\> Get-Process -Id 10048

結果はこのようになります。



次に実行ファイルのバージョンを表示させるには下記のようにします。
PS C:\> Get-Process -Name excel -FileVersionInfo

結果はこのようになります。



次に、プロセスの詳細情報を表示させるには下記のようにします。
PS C:\> Get-Process -Name excel | Format-List *

結果はこのようになります。
Name                       : EXCEL
Id                         : 10048
PriorityClass              : Normal
FileVersion                : 15.0.4875.1000
HandleCount                : 799
WorkingSet                 : 66961408
PagedMemorySize            : 27009024
PrivateMemorySize          : 27009024
VirtualMemorySize          : 535175168
TotalProcessorTime         : 00:00:02.5000000
SI                         : 15
Handles                    : 799
VM                         : 535175168
WS                         : 66961408
PM                         : 27009024
NPM                        : 48592
Path                       : C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE
Company                    : Microsoft Corporation
CPU                        : 2.5
ProductVersion             : 15.0.4875.1000
Description                : Microsoft Excel
Product                    : Microsoft Office 2013
__NounName                 : Process
BasePriority               : 8
ExitCode                   : 
HasExited                  : False
ExitTime                   : 
Handle                     : 2788
SafeHandle                 : Microsoft.Win32.SafeHandles.SafeProcessHandle
MachineName                : .
MainWindowHandle           : 132852
MainWindowTitle            : Book1 - Excel
MainModule                 : System.Diagnostics.ProcessModule (EXCEL.EXE)
MaxWorkingSet              : 1413120
MinWorkingSet              : 204800
Modules                    : {System.Diagnostics.ProcessModule (EXCEL.EXE), System.Diagnostics.ProcessModule (ntdll.dll), System.Diagnostics.ProcessModule (wow64.dll), System.Diagnostics.ProcessModule (wow64win.dll)...}
NonpagedSystemMemorySize   : 48592
NonpagedSystemMemorySize64 : 48592
PagedMemorySize64          : 27009024
PagedSystemMemorySize      : 938696
PagedSystemMemorySize64    : 938696
PeakPagedMemorySize        : 115884032
PeakPagedMemorySize64      : 115884032
PeakWorkingSet             : 141869056
PeakWorkingSet64           : 141869056
PeakVirtualMemorySize      : 684355584
PeakVirtualMemorySize64    : 684355584
PriorityBoostEnabled       : True
PrivateMemorySize64        : 27009024
PrivilegedProcessorTime    : 00:00:01.0156250
ProcessName                : EXCEL
ProcessorAffinity          : 255
Responding                 : True
SessionId                  : 15
StartInfo                  : System.Diagnostics.ProcessStartInfo
StartTime                  : 2016/11/26 17:44:43
SynchronizingObject        : 
Threads                    : {6328, 6912, 12548, 9032...}
UserProcessorTime          : 00:00:01.4843750
VirtualMemorySize64        : 535175168
EnableRaisingEvents        : False
StandardInput              : 
StandardOutput             : 
StandardError              : 
WorkingSet64               : 66961408
Site                       : 
Container                  : 



最後にそのプロセスによりロードされているモジュールを表示させるには下記のようにします。
PS C:\> Get-Process -Name excel -Module

結果はこのようになります。




<関連記事>
【PowerShell】プロセスの停止を待つ
【PowerShell】プロセスをデバッグする
【PowerShell】プロセスを開始する
【PowerShell】実行中のプロセスを停止する
【PowerShell】サービスを開始する

2016年11月26日

【PowerShell】クリップボードに値をセットする


PowerShellでクリップボードに値をセットするには、Set-Clipboardを使います。

構文
Set-Clipboard -Value [セットする内容]




PS C:\Data\test> Set-Clipboard -Value "Hello Clipboard !"
PS C:\Data\test>

PS C:\Data\test> Get-Clipboard
Hello Clipboard !
Get-Clipboardで確認してみると、確かにセットされています。




2016年11月25日

【PowerShell】クリップボードの中身を取得する


PowerShellでクリップボードの中身を取得するには、Get-Clipboardコマンドレットを使います。

構文
Get-Clipboard



この例では、「001.txt」というファイルの中身を表示し、「あいうえお」という文字を選択してコピーしています。



Get-Clipboardでクリップボードの中身が表示されました。

PS C:\data\test> Get-Clipboard
あいうえお




2016年11月24日

【PowerShell】ファイルの作成日時や更新日時を変更する


PowerShellでファイルの作成日時や更新日時を変更するには、Set-ItemPropertyコマンドレットを使います。

構文
Set-ItemProperty [対象のファイル] -name [プロパティ] -value [設定日時]


■作成日時
PS C:\Data\test> Set-ItemProperty 001.txt -name CreationTime -value '2001/05/03 19:27:56'
作成日時を設定するには、CreationTimeプロパティを指定します。


■更新日時
PS C:\Data\test> Set-ItemProperty 001.txt -name LastWriteTime -value '2016/11/13 09:00:00'
更新日時を設定するには、LastWriteTimeプロパティを指定します。


■一括変更
PS C:\Data\test> Set-ItemProperty *.txt -name CreationTime -value '2000/01/01 10:00:00'
また、このようにワイルドカードを使えば、同じ「txt」拡張子のファイルを一括で変更することができます。




2016年11月23日

【PowerShell】ファイルの作成日時や更新日時を取得する


PowerShellでファイルの作成日時や更新日時を取得するには、Get-ItemPropertyコマンドレットを使います。



■ファイル作成日時
PS C:\Data\test> $(Get-ItemProperty 001.txt).CreationTime

2016年11月6日 20:17:50
CreationTimeプロパティで作成日時が取得できます。


■ファイル更新日時
PS C:\Data\test> $(Get-ItemProperty 001.txt).LastWriteTime

2016年11月6日 20:25:55
LastWriteTimeプロパティで更新日時が取得できます。



2016年11月22日

【PowerShell】スタックを使ったロケーションの移動


PowerShellで現在のロケーションを変更するには、Set-Locationを使用しますが、Push-Locationを使うと変更先へのロケーションの移動とともに、移動先のロケーションをスタックに格納することができます。そして、Pop-Locationを使うことによりスタックに積まれたロケーションに順次移動することができます。



この例では、C:\workフォルダ配下に「image1」「image2」「image3」というフォルダがあるとします。



構文
Push-Location [変更先のロケーション]

PS C:\work> Push-Location C:\work\image1
PS C:\work\image1> Push-Location C:\work\image2
PS C:\work\image2> Push-Location C:\work\image3
PS C:\work\image3>


このようにスタックにロケーションが積まれるイメージです。



構文
Pop-Location

PS C:\work\image3> Pop-Location
PS C:\work\image2> Pop-Location
PS C:\work\image1> Pop-Location
PS C:\work>



スタックから取り出すときは、最後に積まれたものから取り出します。
イメージ的にはこんな感じです。



2016年11月21日

【PowerShell】現在のロケーションを変更する


PowerShellで現在のロケーションを変更するには、Set-Locationを使用します。
エイリアスはsl, cd, chdirです。

構文
Set-Location [変更先のロケーション]

PS C:\Data\test> Set-Location C:\
PS C:\>



2016年11月20日

2016年11月19日

【PowerShell】フォルダを移動する


PowerShellでフォルダを移動するには、Move-Itemコマンドレットを使います。

構文
Move-Item [移動元フォルダ] -destination [移動先フォルダ]


PS C:\Data\test> Move-Item image2 -destination C:\Data\work

この例では、C:\Data\test配下にある「image2」という名前のフォルダを、C:\Data\work配下に移動しています。

ちなみに-destinationは省略できます。


2016年11月18日

【PowerShell】フォルダのコピー


PowerShellでフォルダのコピーを行うにはCopy-Itemコマンドレットを使います。

構文
Copy-Item [コピー元のフォルダ名] -destination [コピー先のフォルダ名] -recurse


PS C:\Data\test> Copy-Item image -destination image2 -recurse

この例では、C:\Data\test配下にある「image」という名前のフォルダを、同じ場所に「image2」という名前でコピーしています。
ちなみに-destinationは省略できます。

また、一番後ろに付いている-recurseを付けないとフォルダ内のファイルとかはコピーされませんので注意してください。


2016年11月17日

【PowerShell】フォルダの存在確認をする


PowerShellでフォルダの存在確認をするには、Test-Pathコマンドレットを使います。

構文
Test-Path [フォルダ名]


指定したフォルダが存在すれば、True、存在しなければFalseを返します。




PS C:\Data\test> Test-Path temp
False

この例では、C:\Data\test配下に「temp」という名前のフォルダが存在するか確認しています。
結果は、存在しないのでFalseが返ってきています。


2016年11月16日

【PowerShell】フォルダを作成する


PowerShellでフォルダを作成するには、New-Itemコマンドレットを使います。

構文
New-Item -Path [フォルダ名] -type directory


PS C:\Data\test> New-Item tmp -type directory

この例では、C:\Data\test配下に「tmp」という名前のフォルダを作成しています。

ちなみに-Pathは省略できます。


2016年11月15日

【PowerShell】ファイルのサイズを取得する


ファイルのサイズを取得する方法です。

たとえば、C:\Data\test\imageというフォルダに「aaaa.jpg」というjpgファイルがあったとします。


この「aaaa.jpg」ファイルのサイズを求めるには次のようにします。

Get-ChildItemを使った方法
PS C:\Data\test\image> (Get-ChildItem aaaa.jpg).Length
425167

Get-Itemを使った方法
PS C:\Data\test\image> (Get-Item aaaa.jpg).Length
425167


2016年11月14日

【PowerShell】圧縮ファイル(zipファイル)を解凍する


zipの圧縮ファイルを解凍する方法です。
ちなみにこの機能は、PowerShell V5.0から加わった機能ですのでご注意ください。

構文
Expand-Archive [圧縮ファイル] [解凍先]



たとえば、このようにC:\Data\workフォルダ配下に「txtall.zip」とう圧縮ファイルがあった場合、解凍するには次のようにします。


■「txtall」フォルダに展開
PS C:\Data\work> Expand-Archive txtall.zip txtall


■zipファイルと同じ場所に展開
PS C:\Data\work> Expand-Archive txtall.zip ./


■上書きで展開
-Forceオプションを使います。
PS C:\Data\work> Expand-Archive -Force txtall.zip txtall


2016年11月13日

【PowerShell】圧縮ファイル(zipファイル)を作成する


PowerShellを使ってzip形式の圧縮ファイルを作成する方法です。
ちなみにこの機能は、PowerShell V5.0から加わった機能ですのでご注意ください。

構文
Compress-Archive [圧縮したいファイルまたはフォルダ] [圧縮後のファイル名]


たとえば、C:\Data\testフォルダがこのようになってたとします。


■基本
ここで、「001.txt」ファイルを圧縮して「001.zip」ファイルを作成するには次のようにします。
PS C:\Data\test> Compress-Archive 001.txt 001.zip


■ワイルドカード
拡張子が「txt」のファイルをまとめて圧縮するには次のようにします。
PS C:\Data\test> Compress-Archive *.txt txtall.zip


■全ファイルまとめて
カレントディレクトリ配下のファイル全てをまとめて圧縮したい場合は次のようにします。
PS C:\Data\test> Compress-Archive * all.zip


■上書きで作成する場合
上書きで作成するには-Updateオプションを付けます。
PS C:\Data\test> Compress-Archive -Update *.txt txtall.zip


2016年11月12日

【PowerShell】ファイルの存在確認


指定したファイルが存在するか確認するには、Test-Pathコマンドレットを使用します。


構文
Test-Path [ファイル名]


ファイルが存在する場合は、Trueを返し、無い場合はFalseを返します。

以下では、C:\Data\test\003.txtというファイルが存在するか確認しています。
PS C:\data> Test-Path C:\Data\test\003.txt
True

また、指定するファイルには、ワイルドカードも指定できます。
PS C:\data> Test-Path C:\Data\test\*.txt
True

では、特殊なフォルダの場合はどうでしょうか。
例えば、「マイピクチャ」にあるファイルを指定する場合は以下のようにします。
PS C:\data> $mypic = [Environment]::GetFolderPath('MyPictures')
PS C:\data> Test-Path $mypic\*.jpg
True
[Environment]::GetFolderPathで取得したパスを変数$mypicに格納し、次にTest-Pathで$mypicと*.jpgを組み合わせたパスを指定しています。


2016年11月11日

【PowerShell】ファイルを結合する


いくつかのファイルを連結して一つのファイルにする方法です。

たとえば、三つのファイルがあってそれぞれ次のような内容だったとします。

001.txt
あいうえお

002.txt
かきくけこ

003.txt
さしすせそ


この三つのファイルを結合するには以下のようにします。

Get-Content 001.txt, 002.txt, 003.txt | Set-Content result.txt

Get-Contentコマンドレットで各ファイルの内容を取得します。ファイルはカンマで区切って指定します。
そして、取得した内容をSet-Contentコマンドレットを使ってファイルに書き込んでいます。

結果は次のようになります。
result.txt
あいうえお
かきくけこ
さしすせそ


2016年11月10日

【VB】LINQ to SQL (データの削除)


LINQ to SQLによるデータの削除方法です。

まず、あらかじめSQL Serverに以下のようなテーブルを作成しています。

テーブル名:T_Animals

列名
[ID] [int] NOT NULL
[Name] [nvarchar](50) NULL
[Type] [nvarchar](50) NULL

格納されてるデータ
ID Name Type
1 たま
2 ピーター うさぎ
3 トム
4 お父さん
5 ふてニャン
6 プー くま
7 ファーファ くま
8 ラスカル アライグマ
9 サトちゃん
10 チーバくん
11 パトラッシュ
12 バリィさん
13 ぐんまちゃん ポニー

VB
Dim db = New LinqTest02.DataClasses1DataContext()

Dim query = From n In db.T_Animals
            Where n.ID = 7
            Select n

For Each q In query
    'エンティティを削除保留状態にする
    db.T_Animals.DeleteOnSubmit(q)
Next

'データベースへ変更内容を送信
db.SubmitChanges()

Dim result = From n In db.T_Animals
             Select n

For Each r In result
    Console.WriteLine("{0}, {1}, {2}", r.ID, r.Name, r.Type)
Next

実行結果




2016年11月9日

【C#】LINQ to SQL (データの削除)


LINQ to SQLによるデータの削除方法です。

まず、あらかじめSQL Serverに以下のようなテーブルを作成しています。

テーブル名:T_Animals

列名
[ID] [int] NOT NULL
[Name] [nvarchar](50) NULL
[Type] [nvarchar](50) NULL

格納されてるデータ
ID Name Type
1 たま
2 ピーター うさぎ
3 トム
4 お父さん
5 ふてニャン
6 プー くま
7 ファーファ くま
8 ラスカル アライグマ
9 サトちゃん
10 チーバくん
11 パトラッシュ
12 バリィさん
13 ぐんまちゃん ポニー

C#
var db = new LinqTest01.DataClasses1DataContext();

var query = from n in db.T_Animals
            where n.ID == 7
            select n;

foreach (var q in query)
{
    // エンティティを削除保留状態にする
    db.T_Animals.DeleteOnSubmit(q); 
}

// データベースへ変更内容を送信
db.SubmitChanges();

var result = from n in db.T_Animals
             select n;

foreach (var r in result)
{
    Console.WriteLine("{0}, {1}, {2}", r.ID, r.Name, r.Type);
}


実行結果




2016年11月8日

【VB】LINQ to SQL (データの更新)


LINQ to SQLによるデータの更新方法です。

まず、あらかじめSQL Serverに以下のようなテーブルを作成しています。

テーブル名:T_Animals

列名
[ID] [int] NOT NULL
[Name] [nvarchar](50) NULL
[Type] [nvarchar](50) NULL

格納されてるデータ
ID Name Type
1 たま
2 ピーター うさぎ
3 トム
4 お父さん
5 ふてニャン
6 プー くま
7 ファーファ くま
8 ラスカル アライグマ
9 サトちゃん
10 チーバくん
11 パトラッシュ
12 バリィさん
13 ぐんまちゃん

VB
Dim db = New LinqTest02.DataClasses1DataContext()

Dim query = From n In db.T_Animals
            Where n.ID = 13
            Select n

'クエリーの実行
For Each q In query
    q.Type = "ポニー"
Next

'データベースへ変更内容を送信
db.SubmitChanges()

For Each q In query
    Console.WriteLine("{0}, {1}, {2}", q.ID, q.Name, q.Type)
Next

実行結果

ぐんまちゃんは実はポニーだった!



2016年11月7日

【C#】LINQ to SQL (データの更新)


LINQ to SQLによるデータの更新方法です。

まず、あらかじめSQL Serverに以下のようなテーブルを作成しています。

テーブル名:T_Animals

列名
[ID] [int] NOT NULL
[Name] [nvarchar](50) NULL
[Type] [nvarchar](50) NULL

格納されてるデータ
ID Name Type
1 たま
2 ピーター うさぎ
3 トム
4 お父さん
5 ふてニャン
6 プー くま
7 ファーファ くま
8 ラスカル アライグマ
9 サトちゃん
10 チーバくん
11 パトラッシュ
12 バリィさん
13 ぐんまちゃん

C#
var db = new LinqTest01.DataClasses1DataContext();

var query = from n in db.T_Animals
            where n.ID == 13
            select n;

// クエリーの実行
foreach (var q in query)
{
    q.Type = "ポニー";
}

// データベースへ変更内容を送信
db.SubmitChanges();

foreach (var q in query)
{
    Console.WriteLine("{0}, {1}, {2}", q.ID, q.Name, q.Type);
}

実行結果

ぐんまちゃんは実はポニーだった!


2016年11月6日

Google翻訳の読み上げ機能を使ってヒアリングの勉強ができる


ネットで調べものとかしてると、よく海外のサイトにたどり着くことがあるのですが、そういった場合、私はChromeの拡張機能で入れてるGoogle翻訳を使って英文を訳したりしてます。


こういうやつです。

最近もそんな感じで英文を訳してたのですが、翻訳が表示されたポップアップ画面を見てあることに気づきました。

これって英文を音声で聞けるのか?

試しにスピーカーアイコンを押してみたところ、なんと普通に英文を読み上げてくれるではないですか。


ハッ!!