ねえ–あなたが大丈夫だといいのですが。
PowerShellの使用を開始するのに数分かかりたいと思います。これは、当時のほとんどのPowerShell資料を見つけたときよりも圧倒的ではないと思います。 PowerShellについて聞き続けていると言っていたので、PowerShellに入る方法がわかりません。
最初に知っておくべきことは、ステロイドのコマンドプロンプトのように感じますが、コマンドプロンプトよりもはるかに便利です。開くとすぐに私が何を意味するのかがわかります。それを実行しましょう。ただし、「管理者として実行」を使用して開きましょう。これは、一部のデモに役立つだけです。実際には、本当に必要な場合にのみ、管理者権限で開くことができます。
したがって、スタートボタンをクリックして、PowerShellの入力を開始します。 ISEを(まだ)開いてほしくありません。「WindowsPowerShell」ショートカットを見つけて右クリックし、「管理者として実行」を選択してください。
実行されたので、タスクバーに固定して、次回よりすばやくアクセスできるようにします。 PowerShellを採用しようとする場合は、簡単に開くことができるようにする必要があります。
とにかく、そのウィンドウ…すぐに、何を書くべきかについての手がかりが必要なように感じます。はい、そうです。 ISEの方が少し楽だったかもしれません。また、Aaron Nelson(@sqlvariant)は、PowerShellで何かをするたびにISEを使用しないことを教えてくれましたが、ここでは問題ありません。
DOSから知っているいくつかの基本的なことから始めましょう。コマンドcd
およびdir
。これを試してください:
cd .. dir
C:\WINDOWS
に移動したことがわかります 、次に内容を一覧表示します。ここで驚くことはありません。コマンドプロンプトと同じです。または、十分に年をとっている場合はDOS。
PowerShellとの違いは、これが単なるテキスト出力ではないことです。これらはオブジェクトです 。そして、私たちはそれで何かをすることができます。 PowerShellは「型指定された」環境です。 SSMSのオブジェクトエクスプローラーのように、既にオブジェクトを常に処理しています。 PowerShellオブジェクトには、.Netオブジェクトだけでなく、これらすべてのものを含めることができます。これは、PowerShellがその力を得るところです。
いくつかの簡単なこと…
- PowerShellコマンドは、
Set-Location
などの動詞と名詞のペアで提供されます またはGet-Content
またはGet-ChildItem
。これらはコマンドレットと呼ばれるため、「コマンドレット」という単語が表示されている場合は、PowerShellコマンドを意味します。 - PowerShellコマンドパラメーターはハイフンを使用します。例:
Get-ChildItem -Recurse
ただし、あいまいさがない限り、短縮することもできます。したがって、-rec
を使用できます-recurse
の代わりに 。 - 変数はドル記号(
$
)で始まります )。これについては後で説明します。 -
>
は使用しません フィルタとテストでは、-gt
を使用します 。-eq
=
の場合 、-ne
!=
の場合 /<>
、-le
<=
の場合 、 等々。これは苛立たしいことですが、慣れることでしょう。 - たくさんの略語とエイリアスがあります。
Set-Location
の1つのエイリアスcd
です 。Get-ChildItem
dir
とも呼ばれます 、およびls
それも。Where-Object
?
およびForEach-Object
は%
。これらについても説明します。 - ほとんどすべてでタブ補完が得られるため、
Get-Chi
と入力した場合 、Tabキーを押して、必要なものが見つかるまでオプションを順番に切り替えることができます。 - ヘルプ(
Get-Help
のエイリアス)を使用できます )次を使用するだけです:help dir
、そしてそのヘルプの下部に、help dir -examples
を使用できたという素晴らしいリマインダーが表示されます。 、および-online
を追加します 関連するヘルプページが表示されたWebページを開いていたはずです(これは本当に便利です)。 - パイプ記号(
|
を使用して、あるものの結果を別のものに渡すことができます )。おそらく最も便利なのはgm
です (Get-Member
のエイリアス )、渡したオブジェクトのプロパティとメソッド(メンバー)が一覧表示されます。 -
#
行にコメントを付けるか、<#
の間を移動します および#>
これのいくつかを実際に見てみましょう。
ここでいくつかの興味深いものを見ることができます。 -Exclude
を使用できることに注意してください および-Include
。すぐにそれを行います。 -detailed
を使用してより多くの情報を取得できます 、または-examples
、または-full
。
SQLフォルダを調べてみましょう。 cd \p
と入力することから始めます 次に、
ここでMを押し、もう一度Tabを押して、「MicrosoftSQLServer」を見つけます。行き過ぎた場合は、Shift-Tabを押して後方に移動します。 (ああ、もしあなたがD:
を見ているべきだったら 、次にcd D:\p
でやり直します –しかし、原則は同じです。)
素晴らしい。 Enterキーを押して、ディレクトリが変更されたことを確認しましょう。
ただし、次のように入力します。dir -rec -inc ConfigurationFile.ini
各パラメータの後でTabキーを押すと、より正しいバージョンに展開されるのを見ることができます。 Get-ChildItem
を使用することもできます 少し厳しくします。でも私は本当に気にしません。これを実行すると、いくつかのファイルが一覧表示されます。いくつになるかわかりません。それぞれが、SQLServerのインストールを実行したことを示しています。しかし、SQLの専門家として、あなたはこれを知っています。 PowerShellがそれらを簡単に一覧表示できることを知らなかったかもしれません。
Ok。うまくいけば、これのいくつかの使用法が見られます。
それでは、この出力を使って何かをしましょう。 「これらのファイルを使用して」と言いたいのですが、データのことを実行して、これをファイルのデータセットと考えてみましょう。
それらを数えたいとしましょう。 ForEach-Object
を使用して結果をループできます (ただし、ショートカット%
を使用します )、設定した変数をインクリメントします。これはループの一般的なパターンです。人々はプログラム全体をそれらの中括弧内に、多くの行にわたって配置します。
これでうまくいきますが、数えるための何かが組み込まれていると確信しています。
ええと、私はそのコマンドが何であるかを思い出せないので、それらの豪華なインターネット検索プロバイダーの1つに聞いてみましょう。
これらのページも開きたくありません。 Measure-Object
というコマンドがあることに注意してください。 。出力をそこにパイプしてみましょう。 「上矢印」キーを押すと、前のコマンドに戻ります。
これには少し時間がかかりますが、3つあることを喜んで教えてくれます。
ファイルをもう一度検索する必要があるため、少し時間がかかります。それらの結果をどこかに保存するのはどうですか?
今、私はこれらを括弧と呼んでいますが、アメリカ人はそれらを括弧と呼んでいます。そして、あなたがブラケットと呼ぶもの、私は角括弧と呼びます。中かっこもありますが、これを中かっこと呼んでいると思います。混乱を避けるために、かっこを「丸かっこ」と呼びますが、「かっこ」とは、かっこを意味します。
dir
をラップします 丸括弧で囲んだコマンドを入力し、それを変数に割り当てます。
これで、$configfilelist
をパイプ処理できます Measure-Object
に 結果を保存したので、応答性が向上します。
ただし、$configfilelist
はファイルの配列です。その長さを見ると、3つのアイテムがあることがわかります。それはずっと簡単です。また、0から2までの角かっこを使用して、個々の個人にアクセスできます。
これはまだ画期的なことではありません。しかし、それらのファイルは私たちにいくつかの有用なことを教えてくれます。 Get-Member
を実行しましょう 配列に対するコマンド。
これに躊躇しないでください。上部には、タイプがSystem.IO.FileInfo
のオブジェクトを処理していることがわかります。 。これは.Netのものであり、力の源です。 Delete
を呼び出すことができることがわかります これらのファイルのメソッド、またはCopyTo
、またはDecrypt
(暗号化されているが暗号化されていない場合)など。下部にプロパティが表示されます。
これはもっと面白いです。 LastWriteTime
を見てみましょう 。それがいつなのか興味があるかもしれないからです。
Select-Object
を使用できます 特定のプロパティのみを表示します。
予想どおり、実際にインストールが行われたため、これらのファイルには何も書き込まれていません。しかし、これを特定の時点以降のものだけにフィルタリングしたい場合はどうなりますか?
Get-Date
を使用します 現在の日付と時刻を取得します。それを丸括弧で囲み、そのAddYears
を使用します 1年前を見つける方法。現実の世界では、AddDays
を使用する傾向があります。 、しかし私はいくつかの結果を得たいと思います。
そして、$configfilelist
をフィルタリングします Where-Object
に渡すことによって (ただし、疑問符である便利なショートカットを使用します)。私のフィルターは中括弧(「中括弧」の中にありますよね?)の中にあり、それらの中括弧の中には$configfilelist
にあるものを参照しています。 $_
を使用する 。
したがって、私のフィルターは次のようになり、LastWriteTime
を持つものをリストしたいと言っています。 より大きい(-gt
)今から1年前:
そして、私は1つのファイルしか取得しません。素晴らしい。
それはすべてうまくいっていますが、今はそのインストールが何であったかを知りたいです。そのためには、ファイルの内部を調べる必要があります。 Get-Content
ここにいる私たちの友達です。 Get-Content
を使用することから始めましょう ファイルに対して直接。後で適切なコマンドに簡単に接続できます。
Get-Content
実際には行の配列を返し、-TotalCount
のような本当に便利なパラメータがあります これは特定の行数の後に停止します。または-Tail
ファイルの最後に行を取得します。大きなファイルを扱うときはこれが大好きです。メモ帳で開くことができるわけではありません。
についてお話ししましょう Select-String それも。 grep
のようなものです Unixから–ファイルに必要な行を取得するために使用します。
その出力は苦痛のように見えますが、これはオブジェクトの単なる文字列表現であることを忘れないでください。コマンドをgm
にパイプすると (Get-Member
)、あなたは私が何を意味するかを見るでしょう。
これで、Path
にアクセスできることがわかりました。 ファイルのLine
、LineNumber
、など、別途。
複数のものを探すために、パラメーターの配列を-Pattern
に渡します。 。これを行うには、コンマを使用するだけで、AnalysisServicesのインストールであることがわかります。
うまくいけば、あなたはこれの力を見始めています。
次を使用して、すべてを1行にまとめることができます:
dir -rec -inc ConfigurationFile.ini | ? {$_.LastWriteTime -gt (Get-Date).AddYears(-1)} | select-string -Pattern 'FEATURES=','ACTION=' | select-object Path, Line
(申し訳ありませんが、すべてを表示するには横にスクロールする必要があります。すべてを1行で取得することは、HTMLの長所ではありません。)
好きなことをしているときは、後で使用できるようにコマンドをどこかに保存する必要があります(実行する.ps1ファイルなど)。そのためには、Get-History
に注意する必要があります 。そのセッションで実行したすべてのものが一覧表示されます。
そして、ちょっとしたコツは、負の数を使用して、もう一方の端から配列にフックできることです。だからあなたはこれを行うことができます:
ただし、単に表示するのではなく、clip
にパイプしてください :
…クリップボードに保存します。
これについてはこれ以上詳しく説明しませんが、自分の仕事で興味深いと思われる種類のことを調べて、これをさらに進めていくことができます。 >
を使用して結果をファイルにダンプできます >>
を使用してファイルに追加します 。
次に、次のようなコマンドについて考えます。
Get-EventLog -LogName Application -After (Get-Date).AddHours(-1) -EntryType Error
…そしてそれで何ができるか想像してみてください。
Import-Module SQLServer
を実行してみてください
それであなたは行くことができます:
cd SQLSERVER:
そして、SQL環境をファイルシステムのように閲覧します。
このようなSQLを探索するためにPowerShellを使用することはあまりありませんが、認める必要があります。しかし、私が確かに私にたくさんのオプションを与えることができるという事実。 PowerShellを使用して、https://learn-powershell.net/2014/12/31/beginning-with-powershell-and-word/で行うようにWord文書を作成したり、で説明されているように電子メールを送信したりできるという事実https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage、またはhttps://docs.microsoftで説明されているようにWebサービス(Azure Machine Learningサービスを含む)を呼び出す.com / en-gb / powershell / module / Microsoft.PowerShell.Utility / Invoke-WebRequestは、少し想像力を働かせれば、PowerShellを使用してほぼすべてのことを実行できることを意味します。 Invoke-SqlCommandを使用してSQLからデータを取得し、それをInvoke-WebRequest
にプッシュするのが大好きです。 Azure MLからスコアを取得し、それに応じて応答します。 PowerShellはそれを本当に簡単にします。
ああ、そして他のマシンでPowerShellコマンドを実行するために(もちろん非常に便利です)、簡単な「インターネット検索」でこの便利なページが表示されました:https://www.howtogeek.com/117192/how-to -run-powershell-commands-on-remote-computers /
ファイル内にコンピューターのリストを作成し、次のようにループすることができます。
いくつか試してみてください。自分をノックアウトします。そして、今月火曜日に、Rob Sewell(@sqldbawithbeard)がホストするT-SQLのために誰もが書いていることを調べてください。
@rob_farley