MdbCommandで利用できるSQLデータ型について。次は、文字列です。

こんにちは。
ここで、もう一度MdbCommandについてお知らせします。

MdbCommandは、Windows PowerShellで記述されたモジュールで、mdbファイルをPowerShellで操作するためのものです。
テーブルの作成や参照などの機能のほかに、プログラミングに利用することができるようになっています。

以下で、ダウンロードできます。

GitHub

GitHub - rancomma/MdbCommand: powershell ms mdb file automation command.

  • Windows PowerShellは、Windows7から標準でスタートメニューの「アクセサリ」に入っています。
  • XPでも、Windowsアップデートを行うとインストールされるようです。
  • インストールされていない場合は、Microsoftのサイトからダウンロード出来ます。
  • モジュールは、PowerShell version2 から導入されたもので、コマンドを簡単に増やしたりできる仕組みです。
  • Windows7PowerShellのヴァージョンは、version2です。
  • mdbファイルは、Office Accessデータベースに利用されてるファイルで、Office Access2003までの形式に対応しています。
  • Office Access2007や、Office Access2010は、Accdbファイルになりますが、mdbファイルも利用できます。
  • WindowsXPや7では、mdbファイルを操作するためのライブラリが標準で入っています。
  • MdbCommandを利用するのに、Office Accessは、必須ではありません。

SQLで利用できるデータ型 文字列

それでは、SQLで利用できるデータ型の文字列についてお話します。

◆MS ACCESSSQL データ型
http://office.microsoft.com/ja-jp/access-help/HP001032248.aspx?CTT=5&origin=HP001032229

SQLで入力するデータ型 文字列
データ型 SQLで入力する
データ型
対応する
.NETクラス
備考
VARCHAR varchar
string
[string] 0 〜 255 バイトの文字列
CHARACTER character
char
[string] 0 〜 255 バイトの文字列で、文字が無いところはスペースで埋まります。
TEXT text
memo
[string] 0 〜 2.14 GB の文字列

[string]は、System.String型をあらわします。


MdbCommand をインポートします。

PS (1)  > ipmo .\MdbCommand

前回作成した、testdata.mdbをオープンします。
PassThru スイッチパラメータを指定すると、オープンした結果が返ってきます。

PS (2)  > Open-Mdb testdata.mdb -PassThru

結果

DatabaseName State  Transaction DataSource
------------ -----  ----------- ----------
main         Open   No          C:\scripts\ps1\testdata.mdb

前回作成したテーブルの一覧を参照します。Get-MdbTable コマンドを実行します。

PS (3)  > get-mdbtable

結果

TableName                  TableType  Description
---------                  ---------  -----------
decdata                    TABLE
intdata                    TABLE
moneydata                  TABLE

文字列のデータ型を使ってテーブルを作成します。

PS (4)  > invoke-mdb "create table strdata (varcharA string(50), charA char(50), memoA memo)"

作成したテーブルの列情報を参照します。

PS (5)  > get-mdbcolumn strdata

結果

TableName        Pos ColumnName         DataType  AliasType Size  NotNull Default PKey AutoInc
---------        --- ----------         --------  --------- ----  ------- ------- ---- -------
strdata            1 varcharA           VARCHAR   string    50
strdata            2 charA              CHARACTER char      50
strdata            3 memoA              TEXT      memo

文字列のデータを登録します。

PS (6)  > invoke-mdb "insert into strdata values  ('あいう', '123', '漢字')"

テーブルの中身を見てみます。

PS (7)  > invoke-mdb "select * from strdata"

結果

varcharA                                          charA                                             memoA
--------                                          -----                                             -----
あいう                                            123                                        ... 漢字

charAの最後が「...」になっていますが、データが後ろにまだ何かあることを示しています。
あとで、何文字あるか確かめます。

対応している.NETクラスの型を調べます。

PS (8)  > invoke-mdb "select * from strdata" |gm

結果

   TypeName: MdbCommand.MdbRecord

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
charA       NoteProperty System.String charA=123
memoA       NoteProperty System.String memoA=漢字
varcharA    NoteProperty System.String varcharA=あいう

すべて、System.String型です。


それぞれ、何文字あるか、SQLで調べてみます。ここでは、len関数を使っています。

PS (9)  > invoke-mdb "select len(varcharA),len(charA),len(memoA) from strdata" | ft -auto

結果

Expr1000 Expr1001 Expr1002
-------- -------- --------
       3       50        2

varcharは3文字、charは50文字、memoは2文字になりました。

charAの後ろは何が入っているか調べます。
まず、SELECT文の結果を、row変数に代入して、charAの中身を見てみます。

PS (10) > $row = invoke-mdb "select * from strdata"
PS (11) > "[" + $row.charA + "]"

結果

[123                                               ]

スペースのようです。

すぺースをアンダースコア(_)に変えてみます。

PS (12) > "[" + $row.charA + "]" -replace " ","_"

結果

[123_______________________________________________]

このような感じで、charは固定サイズ、varchar(string)は、可変サイズになっています。
memoは、255文字を超える場合に使うことになると思います。

最後にmdbファイルを閉じます。

PS (13) > close-mdb

次回は、残りのデータ型(日付やYES/NOやバイナリ)を記述します。

今日のコマンド

PS (1) > ipmo .\MdbCommand
PS (2) > Open-Mdb testdata.mdb -PassThru
PS (3) > get-mdbtable
PS (4) > invoke-mdb "create table strdata (varcharA string(50), charA char(50), memoA memo)"
PS (5) > get-mdbcolumn strdata
PS (6) > invoke-mdb "insert into strdata values ('あいう', '123', '漢字')"
PS (7) > invoke-mdb "select * from strdata"
PS (8) > invoke-mdb "select * from strdata" |gm
PS (9) > invoke-mdb "select len(varcharA),len(charA),len(memoA) from strdata" | ft -auto
PS (10) > $row = invoke-mdb "select * from strdata"
PS (11) > "[" + $row.charA + "]"
PS (12) > "[" + $row.charA + "]" -replace " ","_"
PS (13) > close-mdb

MdbCommandで利用できるSQLデータ型についてまとめます。まずは数値から。

こんにちは。
mdbファイルを操作できるMdbCommandで利用できるSQLデータ型と、
対応する.NETのクラスについてまとめます。
今回は、数値について記述します。

利用できるSQLデータ型は、ほぼMS ACCESSと同じです。

◆MS ACCESSSQL データ型
http://office.microsoft.com/ja-jp/access-help/HP001032248.aspx?CTT=5&origin=HP001032229

SQLで入力するデータ型 数値
データ型 SQLで入力する
データ型
対応する
.NETクラス
備考
TINYINT tinyint
byte
[byte] 0 〜 255 の整数
SMALLINT smallint
short
[int16] -32,768 〜 32,767 の整数
INTEGER long
int
integer
[int32] -2,147,483,648 〜 2,147,483,647 の整数
REAL real
single
[single] 4 バイトの範囲で小数
FLOAT float
double
[double] 8 バイトの範囲で小数
DECIMAL decimal
numeric
[decimal] decimal(10,5) のように指定すると整数5ケタ、少数5ケタになります
MONEY money
currency
[decimal] -922,337,203,685,477.5808 〜 922,337,203,685,477.5807 の小数

[byte]は、System.Byte型をあらわします。

MdbCommadを使って、テーブルを作成

整数
PS (1) > ipmo .\MdbCommand
PS (2) > open-mdb testdata.mdb -Create
PS (3) > invoke-mdb "create table intdata (byteA byte, shortA short, intA int)"

テーブル内の列のデータ型を調べるには、Get-MdbColumn を使用します。

PS (4) > get-mdbcolumn intdata

TableName        Pos ColumnName         DataType  AliasType Size  NotNull Default PKey AutoInc
---------        --- ----------         --------  --------- ----  ------- ------- ---- -------
intdata            1 byteA              TINYINT   byte
intdata            2 shortA             SMALLINT  short
intdata            3 intA               INTEGER   int

データを登録します。

PS (5) > invoke-mdb "insert into intdata values (1,1,1)"

データを参照します。

PS (6) > invoke-mdb "select * from intdata"

                           byteA                          shortA                            intA
                           -----                          ------                            ----
                               1                               1                               1

対応する.NETクラスを調べます。

PS (7) > invoke-mdb "select * from intdata"|get-member


   TypeName: MdbCommand.MdbRecord

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
byteA       NoteProperty System.Byte byteA=1
intA        NoteProperty System.Int32 intA=1
shortA      NoteProperty System.Int16 shortA=1

表にあるように、System.Byte、System.Int16、System.Int32が対応します。
System.Int64のデータは、格納するデータ型がありません。
(※SQLでlongと書いてもintになります。)

パラメータを使って、データを登録します。

PS (8) > invoke-mdb "insert into intdata values (?, ?, ?)" 2,3,4
PS (9) > invoke-mdb "select * from intdata"| ft -auto

byteA shortA intA
----- ------ ----
    1      1    1
    2      3    4

パラメータは、?で記述します。

小数
PS (10) > invoke-mdb "create table decdata (singleA single, doubleA double, decimalA decimal(10,5))"
PS (11) > Get-MdbColumn decdata

TableName        Pos ColumnName         DataType  AliasType Size  NotNull Default PKey AutoInc
---------        --- ----------         --------  --------- ----  ------- ------- ---- -------
decdata            1 singleA            REAL      single
decdata            2 doubleA            FLOAT     double
decdata            3 decimalA           DECIMAL   numeric   10,5


PS (12) > invoke-mdb "insert into decdata values (1.1, 2.22, 3.33)"
PS (13) > invoke-mdb "select * from decdata"

                         singleA                         doubleA                        decimalA
                         -------                         -------                        --------
                             1.1                            2.22                         3.33000


PS (14) > invoke-mdb "select * from decdata"|gm


   TypeName: MdbCommand.MdbRecord

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
decimalA    NoteProperty System.Decimal decimalA=3.33000
doubleA     NoteProperty System.Double doubleA=2.22
singleA     NoteProperty System.Single singleA=1.1

小数のほうも、System.Single、System.Double、System.Decimalがそれぞれ対応します。
get-member で見たときの並び順は、Nameの順になるので注意です。

小数もパラメータを使って、データを登録します。

PS (15) > $values = ([single]::MaxValue),([double]::MaxValue),12345.12345
PS (16) > invoke-mdb "insert into decdata values (?,?,?)" $values
PS (17) > invoke-mdb "select * from decdata"| ft -auto

     singleA               doubleA    decimalA
     -------               -------    --------
         1.1                  2.22     3.33000
3.402823E+38 1.79769313486232E+308 12345.12345
お金
PS (18) > invoke-mdb "create table moneydata (moneyA money)"
PS (19) > invoke-mdb "insert into moneydata values (29800)"
PS (20) > invoke-mdb "insert into moneydata values (199.75)"
PS (21) > invoke-mdb "select * from moneydata" | ft -auto

moneyA
------
 29800
199.75

PS (22) > invoke-mdb "select * from moneydata" | % {$_|gm}


   TypeName: MdbCommand.MdbRecord

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
moneyA      NoteProperty System.Decimal moneyA=29800
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
moneyA      NoteProperty System.Decimal moneyA=199.75

MONEYは、System.Decimalに対応します。

次回は、文字列について記述します。

今日のコマンド

PS (1) > ipmo .\MdbCommand
PS (2) > open-mdb testdata.mdb -Create
PS (3) > invoke-mdb "create table intdata (byteA byte, shortA short, intA int)"
PS (4) > get-mdbcolumn intdata
PS (5) > invoke-mdb "insert into intdata values (1,1,1)"
PS (6) > invoke-mdb "select * from intdata"
PS (7) > invoke-mdb "select * from intdata"|get-member
PS (8) > invoke-mdb "insert into intdata values (?, ?, ?)" 2,3,4
PS (9) > invoke-mdb "select * from intdata"| ft -auto
PS (10) > invoke-mdb "create table decdata (singleA single, doubleA double, decimalA decimal(10,5))"
PS (11) > Get-MdbColumn decdata
PS (12) > invoke-mdb "insert into decdata values (1.1, 2.22, 3.33)"
PS (13) > invoke-mdb "select * from decdata"
PS (14) > invoke-mdb "select * from decdata"|gm
PS (15) > $values = ([single]::MaxValue),([double]::MaxValue),12345.12345
PS (16) > invoke-mdb "insert into decdata values (?,?,?)" $values
PS (17) > invoke-mdb "select * from decdata"| ft -auto
PS (18) > invoke-mdb "create table moneydata (moneyA money)"
PS (19) > invoke-mdb "insert into moneydata values (29800)"
PS (20) > invoke-mdb "insert into moneydata values (199.75)"
PS (21) > invoke-mdb "select * from moneydata" | ft -auto
PS (22) > invoke-mdb "select * from moneydata" | % {$_|gm}

PowerShellでデータベース(Mdb)を操作できるモジュールをGitHubに公開しました。

こんにちは。
powershellで、データベースをよく使っているので、気合を入れてモジュールにまとめました。

Windowsに何もインストールしなくても使えます。
mdbファイルを操作するのに、MS OfficeAccessは不要です。さすがに、あったら便利ですが。

モジュールは以下で、ダウンロードできます。
◆rancomma / MdbCommand
GitHub - rancomma/MdbCommand: powershell ms mdb file automation command.

モジュールについては、powershellに、「man about_modules」と入力するか、
以下のリンクを見てください。(同じ内容です)

◆MS TechNet about_modules
about_Modules | Microsoft Docs

使い方

使用するコマンドは、最初は4つです。

コマンド 内容
ipmo モジュールをインポートします。ipmoは、Import-Moduleのエイリアスです。
open-mdb mdbファイルをオープンします。mdbファイルの作成もできます。
invoke-mdb SQLを実行します。
close-mdb mdbファイルをクローズします。
get-mdb オープンしているmdbファイルを確認します。

インポートします。
モジュールフォルダにコピーした場合

PS (1) > ipmo MdbCommand

どこかのフォルダにコピーした場合

PS (1) > ipmo c:\ps1\anyfolder\MdbCommand

相対パスでも大丈夫です。

PS (1) > ipmo .\anyfolder\MdbCommand

ファイルを作成してオープンします。

PS (2) > open-mdb sample.mdb -create

テーブルを作成します。

PS (3) > invoke-mdb "create table test (a int, b string)"

データを登録します。

PS (4) > invoke-mdb "insert into test (a, b) values (1, '文字列')"
PS (5) > invoke-mdb "insert into test (a, b) values (2, 'あいう')"
PS (6) > invoke-mdb "insert into test (a, b) values (3, 'abc')"

データを参照します。

PS (7) > invoke-mdb "select * from test"
                                               a b
                                               - -
                                               1 文字列
                                               2 あいう
                                               3 abc

こんな感じで返ってきます。
ちょっとみずらいので、自動幅調整して、参照します。

PS (8) > invoke-mdb "select * from test" | ft -auto
a b
- -
1 文字列
2 あいう
3 abc

開いているMdbファイルの情報を取得します。

PS (9) > get-mdb
DatabaseName State  Transaction DataSource
------------ -----  ----------- ----------
main         Open   No          C:\scripts\ps1\sample.mdb

Mdbファイルを閉じます。

PS (10) > close-mdb

その他の操作は、GitHubにおいてあるREADMEファイルを見てください。
転載しておきます。

使ってみてください!

README

  [Install Guide]
  1. Check PSModulePath
  C:\PS>$env:PSModulePath -split ";"
  C:\Users\UserName\Documents\WindowsPowerShell\Modules
  C:\Windows\system32\WindowsPowerShell\v1.0\Modules\

  2. Copy MdbCommand Folder
  C:\Users\UserName\Documents\WindowsPowerShell\Modules\MdbCommand


  [MdbCommand Exsamples]

  C:\PS>ipmo MdbCommand

  C:\PS>Open-Mdb newsample.mdb -Create

  C:\PS>Invoke-Mdb 'Create Table table1 (a int not null constraint PK Primary Key, b varchar, 
  c yesno)'
  
  C:\PS>invoke-mdb 'create table table2 (ID counter not null primary key, a int, b int)'
  
  C:\PS>invoke-mdb @'
  create table table3 
  (
    col1 string(5),
    col2 string(5),
    a int,
    constraint PK_table3 primary key (col1, col2)
  )
  '@

  C:\PS>Get-Mdb
  DatabaseName State  Transaction DataSource
  ------------ -----  ----------- ----------
  main         Open   No          C:\scripts\ps1\newsample.mdb

  C:\PS>Get-MdbTable
  TableName                  TableType  Description
  ---------                  ---------  -----------
  table1                     TABLE
  table2                     TABLE
  table3                     TABLE

  C:\PS>Get-MdbColumn -TableName table1|ft -auto
  TableName Pos ColumnName DataType AliasType Size NotNull Default PKey AutoInc
  --------- --- ---------- -------- --------- ---- ------- ------- ---- -------
  table1      1 a          INTEGER  int            YES             YES
  table1      2 b          VARCHAR  string    255
  table1      3 c          BIT      yesno          YES


  C:\PS>Get-MdbIndex |ft -auto
  TableName IndexName                Primary Unique Position ColumnName Collation
  --------- ---------                ------- ------ -------- ---------- ---------
  table1    PK                       YES     YES           1 a          ASC
  table2    Index_7BC68A99_2CED_49DE YES     YES           1 ID         ASC
  table3    PK_table3                YES     YES           1 col1       ASC
  table3    PK_table3                YES     YES           2 col2       ASC


  C:\PS>$list = new-object collections.arraylist
  
  C:\PS>$list.add(@(1,'colb1', $true))
  
  C:\PS>$list.add(@(2,'colb2', $false))
  
  C:\PS>$list.add(@(3,'colb3', $true))
  
  C:\PS>Invoke-MdbBatch 'Insert Into table1 (a, b, c) Values (?, ?, ?)' $list
  
  C:\PS>${MdbCommand.BatchTotalRecordsAffected}
  3


  C:\PS>Add-MdbQuery InsertTable1 'Insert Into Table1 (a, b, c) Values (?, ?, ?)'

  C:\PS>Get-MdbQuery | ft -wrap
  QueryName                 QueryType  SQL
  ---------                 ---------  ---
  InsertTable1              ACTION     INSERT INTO Table1 ( a, b, c )

  C:\PS>Invoke-MdbQuery InsertTable1 -Value 4,'colb4',$false


  C:\PS>Invoke-Mdb 'Select a, b, c From table1 Where a > ?' 1 | ft -auto
  a b         c
  - -         -
  2 colb2 False
  3 colb3  True
  4 colb4 False

  C:\PS>try
  >> {
  >>   Start-MdbTransaction
  >>   
  >>   Invoke-Mdb "Update table1 Set b = 'colb_change' Where a = 1"
  >>   
  >>   # processing
  >>   
  >>   Complete-MdbTransaction
  >> }
  >> catch
  >> {
  >>   Write-Warning "$_"
  >>   Undo-MdbTransaction
  >> }


  C:\PS>Start-MdbConsole
  mdb> select * from table1
  ...> /
  
  a b         c
  - -         -
  1 colb1  True
  2 colb2 False
  3 colb3  True
  4 colb4 False

  mdb> .show
   autosize : on
       echo : off
    headers : on
  nullvalue : ""
    width :
     wrap : on
  mdb>
  mdb> .help
  .autosize ON|OFF       Like Format-Table AutoSize parameter
  .begin                 Start transaction
  .columns ?TABLE?       List columns
  .commit                Commit transaction
  .databases             Show database Info
  .echo ON|OFF           Turn command echo on or off
  .exit                  Exit this console
  .headers ON|OFF        Turn display of headers on or off
  .help                  Show this message
  .indices ?T? ?C? ?I?   List indices
  .nullvalue STRING      Print STRING in place of NULL values
  .quit                  Exit this console
  .rollback              Rollback transaction
  .show                  Show the current values for various settings
  .tables ?TABLE?        List tables
  .views ?VIEW?          List querys and procedures
  .width NUM1 NUM2 ...   Set column widths (If ".width" Then clear widths)
  .wrap ON|OFF           Like Format-Table Wrap parameter
  ; or / or GO           Enter SQL statements terminated
  mdb>

  mdb> .quit
  C:\PS>

  C:\PS>Use-MdbAliasCommand -Prefix mdb-
  C:\PS>get-alias mdb-*
  CommandType     Name                                     Definition
  -----------     ----                                     ----------
  Alias           mdb-begin                                Start-MdbTransaction
  Alias           mdb-close                                Close-Mdb
  Alias           mdb-columns                              Get-MdbColumn
  .....................................


  C:\PS>Use-MdbDotCommand
  C:\PS>get-alias .*
  CommandType     Name                                     Definition
  -----------     ----                                     ----------
  Alias           .begin                                   Start-MdbTransaction
  Alias           .close                                   Close-Mdb
  Alias           .columns                                 Get-MdbColumn
  Alias           .commit                                  Complete-MdbTransaction
  Alias           .console                                 Start-MdbConsole
  .....................................


  C:\PS>Close-Mdb

  
  C:\PS>.mdb sample1.mdb
  
  C:\PS>.databases
  
  C:\PS>.columns
  
  C:\PS>.querys
  
  C:\PS>.execute 'select * from table1'
  
  C:\PS>.quit

Randomコマンドレット Out-Printer 4/236

こんにちは、「Randomコマンドレット」4回目です。

New-Item で関数作成

今回は、New-Item で関数を作成します。
PS (1) > New-Item -Path function:Get-RndCmdlet -Value `
>> {gcm -co cmdlet | random}
>>

CommandType  Name           Definition             
-----------  ----           ----------             
Function     Get-RndCmdlet  gcm -co cmdlet | random

できました。

Get-Item で関数を取得します。

PS (2) > Get-Item -LiteralPath Function:\Get-RndCmdlet

CommandType  Name           Definition             
-----------  ----           ----------             
Function     Get-RndCmdlet  gcm -co cmdlet | random

これを変数に入れて、

PS (3) > $rndcmd = Get-Item -LiteralPath Function:\Get-RndCmdlet

(&) 呼び出し演算子を前につけて、実行します。

PS (4) > & $rndcmd

CommandType  Name         Definition
-----------  ----         ----------
Cmdlet       Out-Printer  Out-Printer [[-Name] <Strin...

Out-Printer コマンドレットです。プリンターで文字を印刷します。

先ほど取得した Get-RndCmdlet 関数の変数を調べてみます。

PS (5) > $rndcmd | gm

   TypeName: System.Management.Automation.FunctionInfo

Name                MemberType     Definition                                
----                ----------     ----------                                
Equals              Method         bool Equals(System.Object obj)            
GetHashCode         Method         int GetHashCode()                         
GetType             Method         type GetType()                            
ToString            Method         string ToString()                         
PSDrive             NoteProperty   System.Management.Automation.PSDriveInf...
PSIsContainer       NoteProperty   System.Boolean PSIsContainer=False        
PSPath              NoteProperty   System.String PSPath=Microsoft.PowerShe...
PSProvider          NoteProperty   System.Management.Automation.ProviderIn...
CmdletBinding       Property       System.Boolean CmdletBinding {get;}       
CommandType         Property       System.Management.Automation.CommandTyp...
DefaultParameterSet Property       System.String DefaultParameterSet {get;}  
Definition          Property       System.String Definition {get;}           
Description         Property       System.String Description {get;set;}      
Module              Property       System.Management.Automation.PSModuleIn...
ModuleName          Property       System.String ModuleName {get;}           
Name                Property       System.String Name {get;}                 
Options             Property       System.Management.Automation.ScopedItem...
OutputType          Property       System.Collections.ObjectModel.ReadOnly...
Parameters          Property       System.Collections.Generic.Dictionary`2...
ParameterSets       Property       System.Collections.ObjectModel.ReadOnly...
ScriptBlock         Property       System.Management.Automation.ScriptBloc...
Visibility          Property       System.Management.Automation.SessionSta...
HelpUri             ScriptProperty System.Object HelpUri {get=try...         

関数は、System.Management.Automation.FunctionInfo 型であることが分かります。
コマンドを使って関数を作ったのですが、関数もオブジェクトの一つという感じです。

本題の、Out-Printer のヘルプを見ます。

PS (6) > man Out-Printer

名前
    Out-Printer
概要
    プリンターに出力を送ります。
構文
    Out-Printer [[-Name] <string>] [-InputObject <psobject>] [<CommonParamete
    rs>]
説明
    Out-Printer コマンドレットは、既定のプリンター、または代替プリンターが指定
されている場合にはその代替プリンターに出力を送ります。

関連するリンク
    Online version: http://go.microsoft.com/fwlink/?LinkID=113367
    Out-Host
    Out-Null
    Out-String
    Out-File
    Out-Default
・・・

短いです。

サンプルを見てみます。

PS (7) > man Out-Printer -Examples

    -------------------------- 例 2 --------------------------

    C:\PS>"Hello, World" | out-printer -name "\\Server01\Prt-6B Color"

    説明
    -----------
    このコマンドにより、Server01 の "Prt-6B Color" プリンターで "Hello, World"
 と印刷されます。このコマンドは
    、Name パラメーターを使用して代替プリンターを指定します。パラメーター名は
オプションであるため、省略できます。

サンプル実行

使っている PC に入っているプリンターを調べます。

PS (8) > get-wmiobject win32_printer

Location      : 
Name          : Microsoft XPS Document Writer
PrinterState  : 0
PrinterStatus : 3
ShareName     : 
SystemName    : XXXXX-PC

Location      : 
Name          : Fax
PrinterState  : 0
PrinterStatus : 3
ShareName     : 
SystemName    : XXXXX-PC

Windows 7 のデフォルトのままで、プリンターは繋いでいません。(というか、プリンターが無い)
それでも、2つ入っています。
(*)SystemNameは、自分の名前が入っているので、モザイクXXXXXにしました。

今回は、XPS で出力します。

打ち間違えると嫌なので、プリンター名を抽出します。

変数に入れます。

PS (9) > $PrinterNames = get-wmiobject win32_printer | % {$_.Name}

PS (10) > $PrinterNames
Microsoft XPS Document Writer
Fax

2つ入りました。

これは、配列なので、最初の一つを取得します。

PS (11) > $PrinterName = $PrinterNames[0]

PS (12) > $PrinterName
Microsoft XPS Document Writer

できました。

では、0 から 100 までの数値を印刷(というかファイル出力)します。

PS (13) > 0..100 | Out-Printer $PrinterName

XPS のファイル名設定ダイアログがでます 〜

XPS ファイルに 0 〜 100 が出力されました。
これで完了です。

New-Item でパラメータ付きの関数を作成

最初に、New-Item で関数を作りましたが、今度は、パラメーター付きの
関数を作ります。

PS (14) > new-item -Path function:Out-HelpToPrinter -Value {
>> param(
>> [string]$Name,
>> [string]$Printer
>> )
>> Get-Help -Full -Name $Name | Out-Printer -Name $Printer
>> }
>>

CommandType  Name               Definition
-----------  ----               ----------
Function     Out-HelpToPrinter  ...

Get-Command にパイプラインで fl をつけて中身を見ます。

PS (15) > gcm Out-HelpToPrinter | fl

Name        : Out-HelpToPrinter
CommandType : Function
Definition  : 
              param(
                [string]$Name,
                [string]$Printer
              )
              Get-Help -Full -Name $Name | Out-Printer -Name $Printer

Get-Help と help と man の関係

この関数は、HELP の例3と、ほとんど同じです。 man では、改ページが入るので、
ここでは、Get-Help を使っています。
ちなみに、man は、Get-Help を使った関数 help の エイリアスです。かなりややこしい。

コマンド 内容
Get-Help コマンドレット本体です。改ページしません。
help Get-Help を使った関数です。more を使って改ページします。
man help 関数の エイリアスです。

PowerShellでは、"Get-"を省略できますが、この場合、help 関数が先に実行されます。

せっかくなので、Out-Printer の HELP を印刷(というかファイル出力)します。

PS (16) > Out-HelpToPrinter -Name Out-Printer -Printer $PrinterName

XPS のファイル名設定ダイアログがでます 〜

中を見てみるとまあまあキレイです。

Acrobatなどあれば、PDFに出力してみたいかも。

Out-Printer

  1. 文字列を指定のプリンターに印刷します。
    1. プリンターを指定しない場合、既定のプリンターで印刷します。
    2. Out-Printer [[-Name] ] [-InputObject ] []
今日のコマンド

PS (1) > New-Item -Path function:Get-RndCmdlet -Value `
>> {gcm -co cmdlet | random}
>>
PS (2) > Get-Item -LiteralPath Function:\Get-RndCmdlet
PS (3) > $rndcmd = Get-Item -LiteralPath Function:\Get-RndCmdlet
PS (4) > & $rndcmd
PS (5) > $rndcmd | gm
PS (6) > man Out-Printer
PS (7) > man Out-Printer -Examples
PS (8) > get-wmiobject win32_printer
PS (9) > $PrinterNames = get-wmiobject win32_printer | % {$_.Name}
PS (10) > $PrinterNames
PS (11) > $PrinterName = $PrinterNames[0]
PS (12) > $PrinterName
PS (13) > 0..100 | Out-Printer $PrinterName
PS (14) > new-item -Path function:Out-HelpToPrinter -Value {
>> param(
>> [string]$Name,
>> [string]$Printer
>> )
>> Get-Help -Full -Name $Name | Out-Printer -Name $Printer
>> }
PS (15) > gcm Out-HelpToPrinter | fl
PS (16) > Out-HelpToPrinter -Name Out-Printer -Printer $PrinterName

Randomコマンドレット Register-ObjectEvent 3/236

こんにちは、「Randomコマンドレット」3回目です。

PS (1) > function Get-RandomCmdlet
>> {
>> Get-Command -CommandType cmdlet | Get-Random
>> }
>>
今回は関数を作ります。

PS (2) > Get-Command -CommandType function -Name Get-RandomCmdlet

CommandType  Name              Definition
-----------  ----              ----------
Function     Get-RandomCmdlet  ...       

できてます。

PS (3) > Get-Command -CommandType function -Name Get-RandomCmdlet | fl

Name        : Get-RandomCmdlet
CommandType : Function
Definition  : 
                Get-Command -CommandType cmdlet | Get-Random

パイプラインで fl をつけると、関数の中身が見れます。

ではランダムに抽出してみます。

PS (4) > Get-RandomCmdlet

CommandType  Name                  Definition                            
-----------  ----                  ----------                            
Cmdlet       Register-ObjectEvent  Register-ObjectEvent [-InputObject]...

ちょっとややこしいのが出ました。

とりあえず、実行してみます。

PS (5) > Register-ObjectEvent

コマンド パイプライン位置 1 のコマンドレット Register-ObjectEvent
次のパラメーターに値を指定してください:
InputObject: 
EventName: 
Register-ObjectEvent : 引数が空の文字列であるため、パラメーター 'EventName' にバインドできませ
ん。
発生場所 行:1 文字:21
+ Register-ObjectEvent <<<< 
    + CategoryInfo          : InvalidData: (:) [Register-ObjectEvent]、ParameterBindingValidat
    ionException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft 
   .PowerShell.Commands.RegisterObjectEventCommand

エラーが表示されましたので、InputObject と EventName のパラメーターで、リターンキーを押しました。
結果はエラー。EventName が必須です。

ヘルプを見ます。

PS (6) > man Register-ObjectEvent -full

名前
    Register-ObjectEvent

概要
    Microsoft .NET Framework オブジェクトによって生成されたイベントをサブスク
ライブします。

構文
    Register-ObjectEvent [-InputObject] <psobject> [-EventName] <string> [[-S
    ourceIdentifier] <string>] [[-Action] <scriptblock>] [-Forward] [-Message
    Data <psobject>] [-SupportEvent] [<CommonParameters>]


説明
    Register-ObjectEvent コマンドレットは、ローカル コンピューターまたはリモー
ト コンピューター上の .NET Framewor
    k オブジェクトによって生成されたイベントをサブスクライブします。

    サブスクライブされたイベントが発生すると、セッションのイベント キューに追
加されます。イベント キューのイベントを取得するには、Get-Event
     コマンドレットを使用します。

    Register-ObjectEvent のパラメーターを使用してイベントのプロパティ値を指定
し、キューのイベントを識別しやすくすることができます
    。Action パラメーターを使用して、サブスクライブしたイベントが発生したとき
に実行するアクションを指定し、Forward パラメーターを使用し
    てローカル セッションのイベント キューにリモート イベントを送信することも
できます。

    イベントをサブスクライブするとき、イベント サブスクライバーがセッションに
追加されます。セッションのイベント サブスクライバーを取得するには、Ge
    t-EventSubscriber コマンドレットを使用します。サブスクリプションをキャンセ
ルするには、Unregister-Event コマンド
    レットを使用して、セッションからイベント サブスクライバーを削除します。
・・・

長いです。サンプルのみ抽出します。

PS (7) > man Register-ObjectEvent -Examples

・・・
   -------------------------- 例 4 --------------------------

   C:\PS>$timer  = New-Object Timers.Timer

   C:\PS> $timer.Interval = 500

   C:\PS> $job = Register-ObjectEvent -inputObject $timer -eventName Elapsed
    -sourceIdentifier Timer.Random -Action {$random = Get-Random -Min 0 -Max
    100}

   C:\PS> $job.gettype().fullname
   System.Management.Automation.PSEventJob

   C:\PS> $job | format-list -property *

   State         : Running
   Module        : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
   StatusMessage :
   HasMoreData   : True
   Location      :
   Command       : $random = Get-Random -Min 0 -Max 100
   JobStateInfo  : Running
   Finished      : System.Threading.ManualResetEvent
   InstanceId    : 88944290-133d-4b44-8752-f901bd8012e2
   Id            : 1
   Name          : Timer.Random
   ChildJobs     : {}
   ...

   C:\PS> $timer.Enabled = $true

   C:\PS> & $job.module {$random}
   60

   C:\PS> & $job.module {$random}
   47


   説明
   -----------
   この例は、イベントの登録で Action を指定した場合に作成される PSEventJob オ
ブジェクトの動的モジュールを使用する方法を示していま
   す。

   最初のコマンドは New-Object コマンドレットを使用してタイマー オブジェクト
を作成します。2 番目のコマンドは、タイマーの間隔を 500
    (ミリ秒) に設定します。

   3 番目のコマンドは、Register-ObjectEvent コマンドレットを使用して、タイマ
ー オブジェクトの Elapsed イベントを登録
   します。このコマンドには、イベントを処理するアクションが指定されています。
タイマーの間隔が経過するたびに、イベントが発生し、このアクションに指定さ
   れたコマンドが実行されます。ここでは、Get-Random コマンドレットによって、0
〜 100 の乱数が生成されて、$random 変数に保存
   されます。

   Register-ObjectEvent コマンドに Action パラメーターを指定すると、そのアク
ションを表す PSEventJob オブジェ
   クトが返されます。このコマンドは、ジョブ オブジェクトを $job 変数に保存し
ます。

   Register-ObjectEvent コマンドレットが返す PSEventJob オブジェクトも、イベ
ント サブスクライバーの Action
   プロパティで使用できます。詳細については、「Get-EventSubscriber」を参照し
てください。

   4 番目のコマンドは、$job 変数に PSEventJob オブジェクトが格納されているこ
とを示しています。5 番目のコマンドは、Format-
   List コマンドレットを使用して、PSEventJob オブジェクトのプロパティをすべて
一覧表示します。

   PSEventJob には Module プロパティが存在し、そのプロパティに、アクションを
実装する動的スクリプト モジュールが含まれています。

   6 番目のコマンドは、タイマーを有効にします。

   残りのコマンドは、呼び出し演算子 (&) を使用し、モジュール内のコマンドを呼
び出して、$random 変数の値を表示します。呼び出し演算子を使用
   すると、エクスポートされないコマンドを含め、モジュール内のコマンドを自由に
呼び出すことができます。ここでは、Elapsed イベントの発生時に生成
   される乱数を表示しています。

   モジュールの詳細については、「about_Modules」を参照してください。
・・・

色々ありますが、例1と例2は、プロセス関連、例3は、リモート関連で
今のところ使わなさそうです。

例4は、タイマー関連で、ランダムを使うので、これをやります。(偶然です)

サンプル実行

PS (8) > $timer = New-Object Timers.Timer

PS (9) > $timer.Interval = 500

PS (10) > $job = Register-ObjectEvent -inputObject $timer -eventName Elapsed `
>> -sourceIdentifier Timer.Random -Action {$random = Get-Random -Min 0 -Max 100}
>>
長いので (`) バッククォートで改行しています。

PS (11) > $job.gettype().fullname
System.Management.Automation.PSEventJob

PS (12) > $job | format-list -property *

State         : NotStarted
Module        : __DynamicModule_4f7c3558-f8b0-43a3-9f13-074a20e8c47a
StatusMessage : 
HasMoreData   : False
Location      : 
Command       : $random = Get-Random -Min 0 -Max 100
JobStateInfo  : NotStarted
Finished      : System.Threading.ManualResetEvent
InstanceId    : a8a5cbeb-d862-4652-8968-1b4114d050c3
Id            : 1
Name          : Timer.Random
ChildJobs     : {}
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}

タイマーを有効にします。
PS (13) > $timer.Enabled = $true

ランダムです。
PS (14) > & $job.module {$random}
35

ランダムです。
PS (15) > & $job.module {$random}
95

ランダムです。
PS (16) > & $job.module {$random}
71

タイマーを止めます。
PS (17) > $timer.Enabled = $false

止めると、結果が変わりません。
PS (18) > & $job.module {$random}
93
PS (19) > & $job.module {$random}
93

サンプル検証

タイマー変数を gm (Get-Member の Alias)で詳しく見てみます。
PS (20) > $timer | gm

   TypeName: System.Timers.Timer

Name                      MemberType Definition                                               
----                      ---------- ----------                                               
Disposed                  Event      System.EventHandler Disposed(System.Object, System.Eve...
Elapsed                   Event      System.Timers.ElapsedEventHandler Elapsed(System.Objec...
BeginInit                 Method     System.Void BeginInit()                                  
Close                     Method     System.Void Close()                                      
CreateObjRef              Method     System.Runtime.Remoting.ObjRef CreateObjRef(type reque...
Dispose                   Method     System.Void Dispose()                                    
EndInit                   Method     System.Void EndInit()                                    
Equals                    Method     bool Equals(System.Object obj)                           
GetHashCode               Method     int GetHashCode()                                        
GetLifetimeService        Method     System.Object GetLifetimeService()                       
GetType                   Method     type GetType()                                           
InitializeLifetimeService Method     System.Object InitializeLifetimeService()                
Start                     Method     System.Void Start()                                      
Stop                      Method     System.Void Stop()                                       
ToString                  Method     string ToString()                                        
AutoReset                 Property   System.Boolean AutoReset {get;set;}                      
Container                 Property   System.ComponentModel.IContainer Container {get;}        
Enabled                   Property   System.Boolean Enabled {get;set;}                        
Interval                  Property   System.Double Interval {get;set;}                        
Site                      Property   System.ComponentModel.ISite Site {get;set;}              
SynchronizingObject       Property   System.ComponentModel.ISynchronizeInvoke Synchronizing...

$timer 変数は、System.Timers.Timer 型であることがわかります。
(8)では、"Timers.Timer" となっていましたが、PowerShell では、"System." を
省略することができます。サンプルは省略しないで欲しいですが・・・

さて、このTimer 型には、Disposed とElapsed のイベント(Event)を持っています。
Disposed は、オブジェクトを破棄するときに発生します。
Elapsed は、google 翻訳で調べると、"経過"と出ましたので、タイマーで
時間が来たらイベントが発生することになります。

PS (21) > start "http://translate.google.com/#en|ja|Elapsed"

パラメーターを使った関数を作ってみます。

(1)で関数を作ったので、ここでは、パラメーターを使った関数を作ってみます。

PS (22) > function Open-GoogleTranslateEnglishToJapanese
>> {
>> param([string]$word)
>> start "http://translate.google.com/#en|ja|$word"
>> }
>>
パラメーターは、param() の中に記述します。[string] は System.String 型の
省略です。

PS (23) > New-Alias en2ja Open-GoogleTranslateEnglishToJapanese

そして関数に対して、Alias を作成します。

PS (24) > en2ja Elapsed

これで、分からない単語を調べれらます。(Elapsed は知らなかった)

Register-ObjectEvent の処理

Register-ObjectEvent コマンドレットは、Timer 型の Elapsed イベントを
登録しています。
Timer は、Interval が 500 なので、500 ミリ秒(0.5 秒)に1回イベントを発生します。

sourceIdentifier パラメーターは、シェル内で一意になる名称で、Timer.Random は
適当な名称です。
このパラメーターは、文字列なので、"Timer.Random" と書けますが、(") は、これもまた
省略できます。省略だらけです。

Action パラメーターの中身=スクリプトブロック

残るは、Action パラメーターです。
中身は、0〜99 までの値を $random 変数に代入します。

PS (25) > $random = Get-Random -Min 0 -Max 100

PS (26) > $random
26

PS (27) > $random
26

代入された値は変わりません。もう一度代入します。

PS (28) > $random = Get-Random -Min 0 -Max 100

PS (29) > $random
6

これで変わります。

Action の後に{}で閉じられていますが、これは、HELP にもあるように、
スクリプトブロックです。
以下でスクリプトブロックのヘルプが見れます。

PS (30) > man about_script_block

TechNet はここです。http://technet.microsoft.com/ja-jp/library/dd315277.aspx

先ほどの代入をスクリプトブロックで記述してみます。

PS (31) > $sb = {$random = Get-Random -Min 0 -Max 100}

実行は、(&) 呼び出し演算子を前につけます。

PS (32) > & $sb
結果なし

この場合、代入して終わりになるので、$random 変数を出力するようにします。

PS (33) > $sb = {$random = Get-Random -Min 0 -Max 100;$random}

(;) セミコロンは、コマンドが一旦そこで終了し、次のコマンドを実行します。
この場合、$random を表示します。

実行してみます。
PS (34) > & $sb
28

PS (35) > & $sb
74

これで、1回ずつ実行されるので結果が異なります。

ということで、0.5 秒に1回ランダムな値を $random 変数に設定していることに
なります。

モジュール内の呼び出し方法

さて、(14) は何をしているでしょう。

構成は、(&) 呼び出し演算子 | モジュール | スクリプトブロック となっています。

これは、トッピック名が英語ですが、 about_command_precedence に記載されています。

PS (36) > man about_command_precedence

・・・
      インポート元がモジュールであるコマンドの場合は、次の形式を使用して実行で
きます。

         & <PSModuleInfo-object> <command>

      たとえば、FileCommands モジュールの Add-File コマンドレットを実行するに
は、次のコマン
      ド シーケンスを使用します。

         $FileCommands = get-module -name FileCommands

         & $FileCommands Add-File
・・・

このあたりです。

先ほどもありましたが、{$randam} で、モジュール内の $random を出力をするように
命令しています。

$randam 変数の値は0.5 秒ごとに変わるので、(14) (15) (16) の値が変わっています。
かなり素早く (14) を連打すると、同じ値が表示されるかも、です。

HELP の例では、ここまででしたが、後始末をしておきます。

PS (37) > Unregister-Event -SourceIdentifier Timer.Random

PS (38) > $job | Remove-Job

応用編(音声でしゃべるので注意してください。)

音声ラーメンタイマーを作成したいと思います。

このサイトを参考にしました。
powershell.com | Power Tips » Text-to-Speech
http://powershell.com/cs/blogs/tips/archive/2011/10/06/text-to-speech.aspx

Interval を、3分にします。

PS (39) > $timer = New-Object Timers.Timer

PS (40) > $timer.Interval = 1000 * 60 * 3

PS (41) > $text = "ramen dekitayo"

PS (42) > $job = Register-ObjectEvent -inputObject $timer -eventName Elapsed `
>> -sourceIdentifier Timer.Ramen -Action {
>> $object = New-Object -ComObject SAPI.SpVoice
>> $object.Speak($text) | Out-Null
>> }
>>

SAPI.SpVoice というCom オブジェクトを利用します。

ここで、タイマーを ON にします。

PS (43) > $timer.Enabled = $true

〜3分間〜

3分経つとシャベリます。

後始末して、終わりです。

PS (44) > $timer.Enabled = $false

PS (45) > Unregister-Event -SourceIdentifier Timer.Ramen

PS (46) > $job | Remove-Job

$false にしないと、何回もシャベリますので注意してください。

Register-ObjectEvent

  1. オブジェクトのイベントを登録します。
    1. System.Timers.Timer 型を登録すると、時間経過で値を変更できます。
    2. Register-ObjectEvent [-InputObject] [-EventName] [[-SourceIdentifier] ] [[-Action] ] [-Forward] [-MessageData ] [-SupportEvent] []
今日のコマンド

PS (1) > function Get-RandomCmdlet
>> {
>> Get-Command -CommandType cmdlet | Get-Random
>> }
>>
PS (2) > Get-Command -CommandType function -Name Get-RandomCmdlet
PS (3) > Get-Command -CommandType function -Name Get-RandomCmdlet | fl
PS (4) > Get-RandomCmdlet
PS (5) > Register-ObjectEvent
PS (6) > man Register-ObjectEvent -full
PS (7) > man Register-ObjectEvent -Examples
PS (8) > $timer = New-Object Timers.Timer
PS (9) > $timer.Interval = 500
PS (10) > $job = Register-ObjectEvent -inputObject $timer -eventName Elapsed `
>> -sourceIdentifier Timer.Random -Action {$random = Get-Random -Min 0 -Max 100}
>>
PS (11) > $job.gettype().fullname
PS (12) > $job | format-list -property *
PS (13) > $timer.Enabled = $true
PS (14) > & $job.module {$random}
PS (15) > & $job.module {$random}
PS (16) > & $job.module {$random}
PS (17) > $timer.Enabled = $false
PS (18) > & $job.module {$random}
PS (19) > & $job.module {$random}
PS (20) > $timer | gm
PS (21) > start "http://translate.google.com/#en|ja|Elapsed"
PS (22) > function Open-GoogleTranslateEnglishToJapanese
>> {
>> param([string]$word)
>> start "http://translate.google.com/#en|ja|$word"
>> }
>>
PS (23) > New-Alias en2ja Open-GoogleTranslateEnglishToJapanese
PS (24) > en2ja Elapsed
PS (25) > $random = Get-Random -Min 0 -Max 100
PS (26) > $random
PS (27) > $random
PS (28) > $random = Get-Random -Min 0 -Max 100
PS (29) > $random
PS (30) > man about_script_block
PS (31) > $sb = {$random = Get-Random -Min 0 -Max 100}
PS (32) > & $sb
PS (33) > $sb = {$random = Get-Random -Min 0 -Max 100;$random}
PS (34) > & $sb
PS (35) > & $sb
PS (36) > man about_command_precedence
PS (37) > Unregister-Event -SourceIdentifier Timer.Random
PS (38) > $job | Remove-Job
PS (39) > $timer = New-Object Timers.Timer
PS (40) > $timer.Interval = 1000 * 60 * 3
PS (41) > $text = "ramen dekitayo"
PS (42) > $job = Register-ObjectEvent -inputObject $timer -eventName Elapsed `
>> -sourceIdentifier Timer.Ramen -Action {
>> $object = New-Object -ComObject SAPI.SpVoice
>> $object.Speak($text) | Out-Null
>> }
>>
PS (43) > $timer.Enabled = $true
PS (44) > $timer.Enabled = $false
PS (45) > Unregister-Event -SourceIdentifier Timer.Ramen
PS (46) > $job | Remove-Job

Randomコマンドレット Write-Verbose 2/236

こんにちは、PowerShell「Randomコマンドレット」2回目です。

PS (1) > $commands = Get-Command -CommandType cmdlet
今回は変数を使います。

PS (2) > $commands

CommandType  Name                 Definition                                         
-----------  ----                 ----------                                         
Cmdlet       Add-Computer         Add-Computer [-DomainName] <String> [-Credential...
Cmdlet       Add-Content          Add-Content [-Path] <String[]> [-Value] <Object[...
Cmdlet       Add-History          Add-History [[-InputObject] <PSObject[]>] [-Pass...
Cmdlet       Add-Member           Add-Member [-MemberType] <PSMemberTypes> [-Name]...
Cmdlet       Add-PSSnapin         Add-PSSnapin [-Name] <String[]> [-PassThru] [-Ve...
Cmdlet       Add-Type             Add-Type [-TypeDefinition] <String> [-Language <...
Cmdlet       Checkpoint-Computer  Checkpoint-Computer [-Description] <String> [[-R...
Cmdlet       Clear-Content        Clear-Content [-Path] <String[]> [-Filter <Strin...
Cmdlet       Clear-EventLog       Clear-EventLog [-LogName] <String[]> [[-Computer...
Cmdlet       Clear-History        Clear-History [[-Id] <Int32[]>] [[-Count] <Int32...
Cmdlet       Clear-Item           Clear-Item [-Path] <String[]> [-Force] [-Filter ...
Cmdlet       Clear-ItemProperty   Clear-ItemProperty [-Path] <String[]> [-Name] <S...
Cmdlet       Clear-Variable       Clear-Variable [-Name] <String[]> [-Include <Str...
Cmdlet       Compare-Object       Compare-Object [-ReferenceObject] <PSObject[]> [...
・・・

$commands変数に、コマンドがABC順に格納されています。

件数を数えると、やはり、236個あります。
PS (3) > $commands.count
236

ではランダムに抽出します。
PS (4) > $commands | Get-Random

CommandType  Name           Definition                                         
-----------  ----           ----------                                         
Cmdlet       Write-Verbose  Write-Verbose [-Message] <String> [-Verbose] [-D...

とりあえず、実行してみます。
PS (5) > Write-Verbose

コマンド パイプライン位置 1 のコマンドレット Write-Verbose
次のパラメーターに値を指定してください:
Message: random

エラーが表示されましたので、Messegeパラメーターに"random"を入力しました。
結果は無し。なんでしょう。

PS (6) > man Write-Verbose

名前
    Write-Verbose

概要
    テキストを詳細メッセージ ストリームに書き込みます。

構文
    Write-Verbose [-Message] <string> [<CommonParameters>]

説明
    Write-Verbose コマンドレットは、テキストを Windows PowerShell の詳細メッセージ ストリームに
書き込みます。通常、詳細メッセージ ストリームを使用し
    て、コマンドのデバッグに使用されるコマンド処理に関する情報を送付します。

    既定では、詳細メッセージ ストリームは表示されませんが、$VerbosePreference 変数の値を変更す
るか、またはいずれかのコマンドで Verbose 共通パラメーターを使
    用することで、詳細メッセージ ストリームを表示できます。

関連するリンク
    Online version: http://go.microsoft.com/fwlink/?LinkID=113429
    Write-Error
    Write-Warning
    about_Preference_Variables

注釈
    例を参照するには、次のように入力してください: "get-help Write-Verbose -examples".
    詳細を参照するには、次のように入力してください: "get-help Write-Verbose -detailed".
    技術情報を参照するには、次のように入力してください: "get-help Write-Verbose -full".

デバック用に利用すると書いてます。詳しくHELPを見るには、-fullをつけます。

PS (7) > man Write-Verbose -full

名前
    Write-Verbose
・・・
パラメーター
    -Message <string>
        表示するメッセージを指定します。このパラメーターは必須です。Verbose-Message に対してメ
ッセージ文字列をパイプ処理することもできます。

        必須                         true
        位置                         1
        既定値
        パイプライン入力を許可する   true (ByValue)
        ワイルドカード文字を許可する false

    <CommonParameters>
        このコマンドレットは、次の共通パラメーターをサポートします: Verbose、
        Debug、ErrorAction、ErrorVariable、WarningAction、WarningVariable、
        OutBuffer、および OutVariable。詳細については、
        「get-help about_commonparameters」と入力してヘルプを参照してください。

入力
    System.String
        パイプを使用してメッセージを含む文字列を Write-Verbose に渡すことができます。

出力
    なし
        Write-Verbose は、詳細メッセージ ストリームに対してのみ書き込みを行います。

メモ

    -------------------------- 例 1 --------------------------

    C:\PS>Write-Verbose -message "Searching the Application Event Log."

    C:\PS> Write-Verbose -message "Searching the Application Event Log." -verbose


    説明
    -----------
    これらのコマンドは、Write-Verbose コマンドレットを使用して、ステータス メッセージを表示しま
す。既定では、メッセージは表示されません。

    2 番目のコマンドでは、Verbose 共通パラメーターが使用されています。これにより、$VerbosePrefe
rence 変数の値とは無関係に、詳細メッセージが表示されます。

    -------------------------- 例 2 --------------------------

    C:\PS>$VerbosePreference = "Continue"

    C:\PS> Write-Verbose "Copying file $filename"


    説明
    -----------
    これらのコマンドは、Write-Verbose コマンドレットを使用して、ステータス メッセージを表示しま
す。既定では、メッセージは表示されません。

    1 番目のコマンドは、"Continue" の値を $VerbosePreference ユーザー設定変数に代入します。既定
値の "SilentlyContinue" は、詳細メッ
    セージを抑止します。

    2 番目のコマンドは詳細メッセージを書き込みます。

関連するリンク
    Online version: http://go.microsoft.com/fwlink/?LinkID=113429
    Write-Error
    Write-Warning
    about_Preference_Variables

色々書いてます。
Messageパラメーターは、必須で文字列を入力する必要があると書いてます。
(5)でエラーになったのは、そのせいですね。
HELPで、サンプルだけ抽出するには、-Examples をつけます。
PS (8) > man Write-Verbose -Examples

・・・(7)の例1、例2のみが出力されます・・・

Write-Verboseコマンドレットは、$VerbosePreference ユーザー設定変数の
値によって、出力されたり、されなかったりが決まるとのことですので、
$VerbosePreferenceを調べます。

そのまま入力してみます。
PS (9) > $VerbosePreference
SilentlyContinue

PowerShellは、値(プロパティ、property)を持っていると表示する性質があります。
詳しく見る場合、Get-Memberを使います。

PS (10) > $VerbosePreference|Get-Member

   TypeName: System.Management.Automation.ActionPreference

Name        MemberType Definition                                          
----        ---------- ----------                                          
CompareTo   Method     int CompareTo(System.Object target)                 
Equals      Method     bool Equals(System.Object obj)                      
GetHashCode Method     int GetHashCode()                                   
GetType     Method     type GetType()                                      
GetTypeCode Method     System.TypeCode GetTypeCode()                       
ToString    Method     string ToString(), string ToString(string format, Sy
value__     Property   System.Int32 value__ {get;set;}                     

$VerbosePreference変数は、System.Management.Automation.ActionPreference型であることが分かります。
変数は、Get-Variableで内容を見ることができます。

PS (11) > Get-Variable VerbosePreference

Name                Value             
----                -----             
VerbosePreference   SilentlyContinue  

注意としては、Get-Variableの引数に、$は必要ありません。
さらに詳しく見るには、パイプラインで fl をつけます。
ちなみに、flは、Format-Listコマンドレットのエイリアスです。

PS (12) > Get-Variable VerbosePreference | fl

Name        : VerbosePreference
Description : 詳細メッセージが配信された場合の動作を指定します。
Value       : SilentlyContinue
Visibility  : Public
Module      : 
ModuleName  : 
Options     : None
Attributes  : {System.Management.Automation.ArgumentTypeConverterAttribute}

では、HELPの例の内容を実行します。
PS (13) > Write-Verbose -message "Searching the Application Event Log."
結果なし。

PS (14) > Write-Verbose -message "Searching the Application Event Log." -verbose

詳細: Searching the Application Event Log.

出ました。黄色です。
$VerbosePreferenceの値を変更します。
PS (15) > $VerbosePreference = "Continue"
PS (16) > Write-Verbose "Copying file $filename"

詳細: Copying file 

出ました。黄色です。しかし$filenameの部分が出ません。

$filenameを設定します。
PS (17) > $filename = "C:\Windows\System32\WindowsPowerShell\v1.0\types.ps1xml"

PS (18) > Write-Verbose "Copying file $filename"

詳細: Copying file C:\Windows\System32\WindowsPowerShell\v1.0\types.ps1xml

出ました。黄色です。$filename は、設定した値に変換されています。

(11)で見たように、Get-Variable を実行すると、値が Continue に変わっています。
PS (19) > Get-Variable VerbosePreference

Name                           Value   
----                           -----   
VerbosePreference              Continue

変更します。
PS (20) > $VerbosePreference = "Silently"

列挙値が無効なため、値 "Silently" を型 "System.Management.Automation.ActionPreference" に変換で
きません。次のいずれかの列挙値を指定し、再試行してください。有効な列挙値: "SilentlyContinue、Stop、
Continue、Inquire"。
発生場所 行:1 文字:19
+ $VerbosePreference <<<<  = "Silently"
    + CategoryInfo          : MetadataError: (:) []、ArgumentTransformationMetadataException
    + FullyQualifiedErrorId : RuntimeException

エラーが出ました。赤色です。
SilentlyContinue、Stop、Continue、Inquire が有効な列挙値とのことです。

もう一度、$VerbosePreference を調べます。
PS (21) > $VerbosePreference | Get-Member

   TypeName: System.Management.Automation.ActionPreference     

Name        MemberType Definition                              
----        ---------- ----------                              
CompareTo   Method     int CompareTo(System.Object target)     
Equals      Method     bool Equals(System.Object obj)          
GetHashCode Method     int GetHashCode()                       
GetType     Method     type GetType()                          
GetTypeCode Method     System.TypeCode GetTypeCode()           
ToString    Method     string ToString(), string ToString(strin
value__     Property   System.Int32 value__ {get;set;}         

GetType()メソッドを実行すると、列挙(System.Enum)であることが分かります。
PS (22) > $VerbosePreference.GetType()

IsPublic IsSerial Name              BaseType    
-------- -------- ----              --------    
True     True     ActionPreference  System.Enum 

Get-Member(エイリアス gm)に、staticパラメータをつけて実行すると、有効な列挙値が表示されます。

PS (23) > [System.Management.Automation.ActionPreference] | gm -static

   TypeName: System.Management.Automation.ActionPreference

Name              MemberType Definition 
----              ---------- ---------- 
Equals            Method     static bool Equals(System.Object objA,...
Format            Method     static string Format(type enumType, Sy...
GetName           Method     static string GetName(type enumType, S...
GetNames          Method     static string[] GetNames(type enumType...
GetUnderlyingType Method     static type GetUnderlyingType(type enu...
GetValues         Method     static array GetValues(type enumType)   
IsDefined         Method     static bool IsDefined(type enumType, S...
Parse             Method     static System.Object Parse(type enumTy...
ReferenceEquals   Method     static bool ReferenceEquals(System.Obj...
ToObject          Method     static System.Object ToObject(type enu...
Continue          Property   static System.Management.Automation.Ac...
Inquire           Property   static System.Management.Automation.Ac...
SilentlyContinue  Property   static System.Management.Automation.Ac...
Stop              Property   static System.Management.Automation.Ac...

でました。

"SilentlyContinue"と文字列で設定していましたが、以下の入力と同じです。
列挙値は"SilentlyContinue"のように省略できます。
PS (24) > $VerbosePreference = [System.Management.Automation.ActionPreference]::SilentlyContinue

PS (25) > $VerbosePreference
SilentlyContinue
変更されています。

VerbosePreference以外のユーザー設定変数も見てみます。
PS (26) > variable *Preference

Name                           Value            
----                           -----            
ConfirmPreference              High             
DebugPreference                SilentlyContinue 
ErrorActionPreference          Continue         
ProgressPreference             Continue         
VerbosePreference              SilentlyContinue 
WarningPreference              Continue         
WhatIfPreference               False            

色々あります。

以下のコマンドで、説明を読むことができます。
PS (27) > variable *Preference | select Name, Value, Description | ft -AutoSize -Wrap

Name                             Value Description                                                                     
----                             ----- -----------                                                                     
ConfirmPreference                 High 確認を要求する時期を指定します。操作の ConfirmImpact が $ConfirmPreference 以上 
                                       の場合は、確認が要求されます。$ConfirmPreference が None の場合、操作が確認され 
                                       るのは Confirm が指定されたときのみです。                                       
DebugPreference       SilentlyContinue デバッグ メッセージが配信された場合に行う動作を指定します。                     
ErrorActionPreference         Continue エラー メッセージが配信された場合に行う動作を指定します。                       
ProgressPreference            Continue 進行状況記録が配信された場合の動作を指定します。                                
VerbosePreference     SilentlyContinue 詳細メッセージが配信された場合の動作を指定します。                              
WarningPreference             Continue 警告メッセージが配信された場合の動作を指定します。                              
WhatIfPreference                 False true の場合は、すべてのコマンドに対して WhatIf が有効と見なされます。           

HELPには、HelpFileという色々なトピックごとのヘルプが読めます。
ユーザー設定変数は、about_Preference_Variablesで読めます。
トピック名は英語なので、なかなかすぐ思いつかないですが。

PS (28) > man about_Preference_Variables

トピック
    ユーザー設定変数

簡易説明
    Windows PowerShell の動作をカスタマイズする変数

詳細説明
    Windows PowerShell には、その動作をカスタマイズするための一連の
    変数が用意されています。これらの "ユーザー設定変数" は、GUI
    ベースのシステムのオプションと同様に機能します。

    ユーザー設定変数は、Windows PowerShell の動作環境およびその環境
    で実行されるすべてのコマンドに影響します。多くの場合、コマンド
    レットには、特定のコマンドのユーザー設定動作を上書きするための
    パラメーターがあります。

    ユーザー設定変数およびその既定値の一覧を次の表に示します。

    変数                                 既定値
    --------                             -------------
    $ConfirmPreference                   High
    $DebugPreference                     SilentlyContinue
    $ErrorActionPreference               Continue
    $ErrorView                           NormalView
    $FormatEnumerationLimit              4
    $LogCommandHealthEvent               False (ログに記録しない)
    $LogCommandLifecycleEvent            False (ログに記録しない)
    $LogEngineHealthEvent                True (ログに記録する)
    $LogEngineLifecycleEvent             True (ログに記録する)
    $LogProviderLifecycleEvent           True (ログに記録する)
    $LogProviderHealthEvent              True (ログに記録する)
    $MaximumAliasCount                   4096
    $MaximumDriveCount                   4096
    $MaximumErrorCount                   256
    $MaximumFunctionCount                4096
    $MaximumHistoryCount                 64
    $MaximumVariableCount                4096
    $OFS                                 (空白文字 (" "))
    $OutputEncoding                      ASCIIEncoding オブジェクト
    $ProgressPreference                  Continue
    $PSEmailServer                       (なし)
    $PSSessionApplicationName            WSMAN
    $PSSessionConfigurationName          http://schemas.microsoft.com/powershell/microsoft.powe
rshell
    $PSSessionOption                     (下記参照)
    $VerbosePreference                   SilentlyContinue
    $WarningPreference                   Continue
    $WhatIfPreference                    0
・・・

色々書いてます。
Webではこちらで見れます。http://technet.microsoft.com/ja-jp/library/dd347731.aspx

Write-Verbose

  1. デバック用に文字列を出力する
    • $VerbosePreference ユーザー設定変数の値によって出力されるかどうか決まる。
    • $VerbosePreference の規定値は、SilentlyContinue で、出力されない。
    • $VerbosePreference を、Continue に変えると出力される。
    • ただし、Verboseパラメーターを付けると、強制的に出力される
      • Write-Verbose [-Message] []
今日のコマンド

PS (1) > $commands = Get-Command -CommandType cmdlet
PS (2) > $commands
PS (3) > $commands.count
PS (4) > $commands | Get-Random
PS (5) > Write-Verbose
PS (6) > man Write-Verbose
PS (7) > man Write-Verbose -full
PS (8) > man Write-Verbose -Examples
PS (9) > $VerbosePreference
PS (10) > $VerbosePreference|Get-Member
PS (11) > Get-Variable VerbosePreference
PS (12) > Get-Variable VerbosePreference | fl
PS (13) > Write-Verbose -message "Searching the Application Event Log."
PS (14) > Write-Verbose -message "Searching the Application Event Log." -verbose
PS (15) > $VerbosePreference = "Continue"
PS (16) > Write-Verbose "Copying file $filename"
PS (17) > $filename = "C:\Windows\System32\WindowsPowerShell\v1.0\types.ps1xml"
PS (18) > Write-Verbose "Copying file $filename"
PS (19) > Get-Variable VerbosePreference
PS (20) > $VerbosePreference = "Silently"
PS (21) > $VerbosePreference|Get-Member
PS (22) > $VerbosePreference.GetType()
PS (23) > [System.Management.Automation.ActionPreference] | gm -static
PS (24) > $VerbosePreference = [System.Management.Automation.ActionPreference]::SilentlyContinue
PS (25) > $VerbosePreference
PS (26) > variable *Preference
PS (27) > variable *Preference | select Name, Value, Description | ft -AutoSize -Wrap
PS (28) > man about_Preference_Variables

Randomコマンドレット Get-Random 1/236

こんにちは、「Randomコマンドレット」を始めます。

PS (1) > gcm -co cmdlet | random

CommandType     Name         Definition                                         
-----------     ----         ----------                                         
Cmdlet          Out-String   Out-String [-Stream] [-Width <Int32>] [-InputObj...

PowerShell には、236のコマンドレットと呼ばれるコマンドがあるので、
これをランダムに見ていこうと思います。

(1)のコマンドを入力すると、236のうち1つ選ばれて出力されます。

PS (2) > out-string

ランダムの結果、Out-String が選ばれました。
これを実行してみると、何も出力されませんでした。なんでしょう。

PS (3) > Get-Command -CommandType cmdlet | Get-Random

CommandType     Name                    Definition                                         
-----------     ----                    ----------                                         
Cmdlet          Disable-ComputerRestore Disable-ComputerRestore [-Drive] <String[]> [-Ve...

(1)は、(3)の省略した記述になります。

省略 そのまま 説明
gcm Get-Command これは、エイリアス(alias)です。
-co -CommandType パラメータは、ある程度、省略できます。
random Get-Random コマンドは、"Get-"を省略できます。

今度は、ランダムの結果、Disable-ComputerRestore が選ばれました。
これは、なんでしょう?使ったこと無いですね。

PS (4) > man Disable-ComputerRestore

名前
    Disable-ComputerRestore

概要
    指定したファイル システム ドライブのシステム復元機能を無効にします。

構文
    Disable-ComputerRestore [-Drive] <string[]> [-Confirm] [-WhatIf] [<CommonParameters>]

・・・

PowerShellの中で、ヘルプが読めます。
Webで検索すると、MSのTechNetのオンラインヘルプがすぐに出てきます。
(検索結果)http://technet.microsoft.com/ja-jp/library/dd347710.aspx

さて、Randomコマンドレットなので、1回目は、Get-Randomを調べます。

PS (5) > help Get-Random

名前
    Get-Random

概要
    ランダムな数値を取得するか、オブジェクトをコレクションからランダムに選択します。

構文
    Get-Random [-InputObject] <Object[]> [-Count <int>] [-SetSeed <int>] [<CommonParameters>]

    Get-Random [[-Maximum] <Object>] [-Minimum <Object>] [-SetSeed <int>] [<CommonParameters>]

説明
    Get-Random コマンドレットは、ランダムに選択された数値を取得します。オブジェクトのコレクションを
 Get-Random に送ると、ランダムに選択された 1 つまたは複数のオブジェクトをコレクションから取得します。

    パラメーターまたは入力のない Get-Random コマンドは、0 (ゼロ) 〜 Int32.MaxValue (0x7FFFFFFF、
2,147,483,647) のランダムに選択された 32 ビット符号なし整数を返します。

    Get-Random のパラメーターを使用すると、シード数、最小値と最大値、および送られたコレクションから
返されるオブジェクトの数を指定できます。
・・・

色々書いてます。

早速やってみます。
まずは、そのまま。0〜2,147,483,647までの間でランダムな値が返ってきます。
PS (6) > Get-Random
904529694
PS (7) > Get-Random
1568636065
PS (8) > Get-Random
1361652924

次は、最少と、最大を決めて。
PS (9) > Get-Random -Minimum 1 -Maximum 100
85
PS (10) > Get-Random -Minimum 1 -Maximum 100
86
PS (11) > Get-Random -Minimum 1 -Maximum 100
80
PS (12) > Get-Random -Minimum 1 -Maximum 100
63
PS (13) > Get-Random -Minimum 1 -Maximum 100
26

次は、「オブジェクトをコレクションからランダム」ってことで
配列から一つ選びます。
1..100 は、1から100までの配列を作成します。
PS (14) > 1..100 | Get-Random
92
PS (15) > 1..100 | Get-Random
48
PS (16) > 1..100 | Get-Random
9

SetSeedパラメーターも試してみます。
同じ値が返ってきます。(使わなさそう・・・)
PS (17) > Get-Random -Minimum 1 -Maximum 101 -SetSeed 1
25
PS (18) > 1..100 | Get-Random -SetSeed 1
85
PS (19) > 1..100 | Get-Random -SetSeed 1
85
PS (20) > 1..100 | Get-Random -SetSeed 1
85

Get-Randomを調べるには、先ほどのhelp もしくは man もしくは Get-Helpを呼び出すと、
PowerShell内のヘルプが読めます。
もう一つは、Get-Commandで、詳しい内容を取得できます。

PS (21) > Get-Command -Name Get-Random

CommandType     Name        Definition                                         
-----------     ----        ----------                                         
Cmdlet          Get-Random  Get-Random [[-Maximum] <Object>] [-SetSeed <Null...

ほとんど途切れてしまうので、後ろにパイプラインで fl をつけると全部みれます。

PS (22) > Get-Command -Name Get-Random | fl

Name             : Get-Random
CommandType      : Cmdlet
Definition       : Get-Random [[-Maximum] <Object>] [-SetSeed <Nullable`1>] [-Minimum <Object>] [-Verbose] [-Debug] [-E
                   rrorAction <ActionPreference>] [-WarningAction <ActionPreference>] [-ErrorVariable <String>] [-Warni
                   ngVariable <String>] [-OutVariable <String>] [-OutBuffer <Int32>]
                   Get-Random [-InputObject] <Object[]> [-SetSeed <Nullable`1>] [-Count <Int32>] [-Verbose] [-Debug] [-
                   ErrorAction <ActionPreference>] [-WarningAction <ActionPreference>] [-ErrorVariable <String>] [-Warn
                   ingVariable <String>] [-OutVariable <String>] [-OutBuffer <Int32>]

Path             :
AssemblyInfo     :
DLL              : C:\Windows\assembly\GAC_MSIL\Microsoft.PowerShell.Commands.Utility\1.0.0.0__31bf3856ad364e35\Microso
                   ft.PowerShell.Commands.Utility.dll
HelpFile         : Microsoft.PowerShell.Commands.Utility.dll-Help.xml
ParameterSets    : {[[-Maximum] <Object>] [-SetSeed <Nullable`1>] [-Minimum <Object>] [-Verbose] [-Debug] [-ErrorAction
                    <ActionPreference>] [-WarningAction <ActionPreference>] [-ErrorVariable <String>] [-WarningVariable
                    <String>] [-OutVariable <String>] [-OutBuffer <Int32>], [-InputObject] <Object[]> [-SetSeed <Nullab
                   le`1>] [-Count <Int32>] [-Verbose] [-Debug] [-ErrorAction <ActionPreference>] [-WarningAction <Actio
                   nPreference>] [-ErrorVariable <String>] [-WarningVariable <String>] [-OutVariable <String>] [-OutBuf
                   fer <Int32>]}
ImplementingType : Microsoft.PowerShell.Commands.GetRandomCommand
Verb             : Get
Noun             : Random

長いですね。

Get-Randomには、2種類の使い方がありました。
  1. ランダムな数値を返す
    • 指定がなければ、0〜2,147,483,647
    • 指定があれば、その範囲で返す。例えば1〜100 (-min 1 -max 100)
  1. オブジェクトをコレクションからランダムに返す
    • 1から100の配列から1つ返す
    • Get-Commamnd -CommandType cmdlet の結果から1つ返す

これは、パラメータセットと言って、1つのコマンドレットに2種類の使い方が
定義されています。
それぞれ名前が付いていて、以下で調べることができます。

PS (23) > Get-Command -Name Get-Random | % {$_.parametersets}

・・・長い

PS (24) > Get-Command -Name Get-Random | % {$_.parametersets}| % {$_.tostring()}

[[-Maximum] <Object>] [-SetSeed <Nullable`1>] [-Minimum <Object>] [-Verbose] [-Debug] [-ErrorAction <ActionPreference>]
 [-WarningAction <ActionPreference>] [-ErrorVariable <String>] [-WarningVariable <String>] [-OutVariable <String>] [-Ou
tBuffer <Int32>]
[-InputObject] <Object[]> [-SetSeed <Nullable`1>] [-Count <Int32>] [-Verbose] [-Debug] [-ErrorAction <ActionPreference>
] [-WarningAction <ActionPreference>] [-ErrorVariable <String>] [-WarningVariable <String>] [-OutVariable <String>] [-O
utBuffer <Int32>]

PS (25) > Get-Command -Name Get-Random | % {$_.parametersets}| % {$_.name}

RandomNumberParameterSet
RandomListItemParameterSet

Get-Random

  1. ランダムな数値を返す (ランダムナンバーパラメータセット)