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

2021年8月20日金曜日

◆Set-ADUser

https://atmarkit.itmedia.co.jp/ait/articles/2108/19/news004.html#_ga=2.20275579.276634599.1629436537-971364125.1629436537


この人、ReplaceパラメータとReplace演算子の区別がついてないかも。

2020年5月15日金曜日

◆VSCodeでターミナルの文字化けを直す

バージョン:1.45.1
「ファイル」「ユーザー設定」「設定」を開き、「左ペイン」から「テキストエディター」をクリック。
すこし上にスクロールすると「settings.jsonで編集」リンクがあるのでクリックして
以下の設定を追加(ただし、ソースによって直らないケースもまだあるなぁ・・・)
ソースがUTF8の時はBOM付きがよさげ、だが完ぺきというわけでもない。
ソースはSJISが無難か?
"terminal.integrated.shellArgs.windows": [
"-NoExit",
"chcp",
"65001"
        ],



2018年2月19日月曜日

◆ふざけるなJR東日本

いつも7:16発の新幹線で通勤しているのだが、今日は事故か何かの影響?でいつもは隣のホームから出ている7:11発の新幹線がそこに入っていた。

何も知らずに7:10頃に乗り込んだ私はいつもと違う車内の混み具合を感じつつも何が起きているのかすぐには理解ができなかった。
たまたま団体客が入ったのか?と思っていると、座る間もなく新幹線が発車してしまった。
え、なんでもう発車するのと思った時には既に遅く、えー、いつもと新幹線違うじゃん、仙台まで止まらな~い!!。

普通こんな危険なダイヤ変更する?
このタイミングで来たら絶対間違うよね。

なぜ、エスカレーター乗り場あたりで声がけが出来ないの?

車掌に文句を言ったら出発駅に言えだと・・・。

昔からJR東日本の対応には不満を持っていたが、相変わらずだ。

こんな体制でインバウンドを取り込めるのかぁ。

いつまでたってもお役所体質だ。

PowerShellとは全く関係がないがあまりに腹がたったので独り言。

2016年1月13日水曜日

◆Open Live Writer を使ってみる(番外編)

私はこのブログを書くのに「Windows Live Writer」と「Blogger」を使ってきたのだが、最近「Windows Live Writer」から「Blogger」への接続がエラーになるように成ってしまった。

どうも、「Blogger」側(Google)がセキュリティー強化のため認証方法を変更したっぽい。
「Windows Liver Writer」は良いソフトなのだが、MSのWindows Live戦略の頓挫(方針変更?)によりここ数年アップデートされたことは無い。(多分今後も無いだろう)

最近ブログを書くペースも落ちてきているので、まぁいいか・・・、と思っていたところ、運良く「Windows Live Writer 」がオープンソース化されて「Open Live Writer」となったとの情報を見つけた。

リリース当初は「Blogger」に対応できていなかったようだが、最新版では問題なく接続できた(英語版ですが)
日本語での投稿自体は問題ないようなので、しばらく使ってみようと思う。(プラグインはまだ対応していないようだが、オープンソースなので近いうちに対応してくるのではなかろうか・・・)

あら、カテゴリーが設定できない・・・。

---

その後使っていると、やっぱりプラグインが使えないのが微妙に痛い。
そこで、当面の暫定策として「Windows Live Writer」も一緒に立ち上げ、編集はそちらで行い、HTMLソースをコピペで「Open Live Writer」に持ってきて投稿だけをこちらで行うことにした。

あら、カテゴリーが設定できるぞ・・・。

----
2016/10/28追記

久しぶりに使ってみたら過去記事の一覧取得でエラーになる。(><)
(新規作成はできそう)

バージョンアップ版が無いかサイトを見てみたがバージョン表記が無いので良く判らない(メジャーバージョンしかわからない)

仕方がないのでダウンロードして実行してみる。
あら、エラー・・・。
まぁいいや諦めて旧バージョンを実行、っと思ったらエラー(><)
リンク先が無くなっている。消されちゃった?

仕方が無いのでダメもとで再度先ほどのセットアップファイルを実行してみる。

すると、Open Live Writerが起動する。(@@)

あれ、インストーラーじゃなくて実行ファイルそのものだったの???

もしくは最近のOfficeとかで使われている「クイック実行形式」???

最近の世の中にはついていけないな(笑)

2014年9月11日木曜日

◆Get-Helpの怪

なぜか以下のようなエラーが発生する。

PS>get-help  演算子
Get-Help : 型 [Microsoft.ActiveDirectory.Management.ADUser] が見つかりません。この型を含むアセンブリが読み
ことを確認してください。
発生場所 行:1 文字:9
+ get-help <<<<  演算子
    + CategoryInfo          : InvalidOperation: (Microsoft.Activ...nagement.ADUser:String) [Get-Help]、Ru
    + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.GetHelpCommand

普通は「演算子」という文字列が含まれるヘルプが一覧表示される。

image

さ~、なんとしたものか・・・。

自分だけがおかしいということは「Profile」・・・。

案の定、プロファイル無しで起動したらエラーは発生しなかった。

さぁ、ではプロファイルの何が悪いのか・・・。

なんだかんだ使わない物やテスト的に入っているものもありプロファイルは結構な量になっている。

と嘆いても仕方が無いので2分割方?で探していく・・・・・・・・・・・・・・・・・・・。

やっと見つけた、これだ!!

$env:path += ";D:\svndoc\PS\;.\"

ん~、スクリプトの入ったフォルダをPath環境変数に追加しているだけだ。

もしかして、このスクリプトの中もヘルプで探しに行ってしまうのか?

Version3で同じ環境にして試した見たが再現しなかった。

という事は「バグ」か。(><)

2014年8月13日水曜日

◆嵌る

ここ数ヶ月、火を噴いている突発的な仕事のお手伝いで忙しく、PowerShellともご無沙汰。

だいぶ老化が進んでいるのでちょっと使っていないとすぐに忘れる。
なんとか過去の投稿を見たりして思い出していかないと・・・。


以下のような何の変哲もないコマンドを打ったところ、
image

結果がこんな感じに表示された。
image

?、なんで?

これは、
image

ちゃんと表示される。
image

scriptpropertyだから?なんて思って「types.ps1xml」なんかを見てみても特に「CPU」が特別という事は無い。

しば~らく考えたが、全く持って検討も付かない。

ふと、こんな感じに入力してみたら、
image

あれ、表示された。
image

あ~、そう。
いや~、素人丸出し?

こいつの結果って、
image

こうなっちゃってるのね・・・。
image

あ~、もう、ヘッダーが見えない時点で気づこうよ(笑)

全く持って余計なところで時間をくってしまったが、やりたかったのは以下のようなスクリプト。
image

むか~し、以下で書いたことはあるのだが、どうも今まで有効に使ってこなかった気がする。
PowerShell: ◆カスタマイズした条件を使ってグルーピングする(Group-Object)

ハッシュテーブル化する方法は便利そうなので、忘れないようにしたい。
っと言っても忘れるのだが・・・。(笑)

----

ちなみに、そもそも今回の嵌りは画面の表示サイズとバッファサイズをずらしたのがいけないのだと思います。

image

2013年10月2日水曜日

◆about系のヘルプはまだ?

最近ちょっとPowerShellから離れていたので良く判らないが、about系のヘルプはまだ日本語化されていないのだろうか。

Update-Helpでも入ってこないっポイ?

Onlineでも参照できない?

image

自分的には英語でもそんなに苦ではないのだが、人に教えるときに「ほら、こうやってヘルプを見ると簡単でしょ?」と言えないのがちょっと・・・。
特にコマンドレットのヘルプなら英語でも良いけど、about系は説明がメインだから余計厳しい。

クライアントではそれほど3.0のメリットも感じないので、7で2.0を使うのが幸せなのだろうか。

8はちょっと失敗感ただよっているしなぁ・・・。

2013年2月14日木曜日

◆「【改訂新版】Windows PowerShell ポケットリファレンス」

我らが牟田口さんのポケットリファレンスがVer3に対応して発売されるそうです。

PowerShellは本当に守備範囲が広がり、全体を俯瞰するのが難しくなっているので、この様な本があると重宝しますよね。

2013年2月6日水曜日

◆関数を削除する

中身を良く判らずにサンプルを取り込んで使っていると不可解なエラーに悩まされることがある。

今回はそのパターンの一つ。

どうにもこうにもエラーメッセージからは何が起きているのが見当がつかない。
仕方がないのでステップ実行すると突然あらぬところへ飛んでいきループが始まる。

やっと気づいた。

サンプルで使っていたネイティブなコマンドと自分で追加した関数の名前がかぶっている。(><)

ちゃんとコマンドレットっぽい関数名にすればこんなことは起きないのだが、オレオレ関数とコマンドレットの区別がつきづらく好きではない。

で、関数名を修正しこれでOKと思ったらどうにも直らない・・・。

あ~、名前を変えただけじゃなく削除しなきゃダメなのね。

PowerGUIの場合、「Reset RunSpace」なるアドオンがあってクリアできるのだが本家PowerShell_ISEでは出来そうもない。

再起動すればよいのだが、タブを沢山開いているとちょっと面倒。

という訳でピンポイントで関数を削除するには・・・。

あれぇ、コマンドがみつからない。

あ~、もしかして単純に「del function:hoge」かな。

 

余談だが、PowerShell_ISE君、ソースをドロップして開けないのね・・・。

この間のコメント化機能といい、どうしてこんなアプリケーションの基本中の基本の機能が無いのでしょう。

PowerGUIはVer3版で使うと良くフリーズするし・・・。
どなたかお勧めの環境はありませんか?

2012年1月30日月曜日

◆コンソール出力に下線(アンダーライン)を引く

以下を参考にアンダーラインを引くサンプルを作って見ました。
固定ピッチフォントの環境じゃないとずれてしまうような気はしますが・・・。

Multiply PowerShell Strings to Customize Text Underlines - Hey, Scripting Guy! Blog - Site Home - TechNet Blogs

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022

Function New-Underline
{
 
[CmdletBinding()]
  param
(
     
[Parameter(Mandatory = $true,Position = 0,valueFromPipeline=$true)]
      [string]
      $stringIN,
      [string]
      $char = " ̄"
  )
 
$encSjis = [System.Text.Encoding]::GetEncoding("Shift-JIS"
)
 
$x = $encSjis.GetByteCount($stringIN
)
 
$y = $encSjis.GetByteCount($char
)
 
$underLine = $char * ([Math]::Ceiling($x / $y
))

 
Write-Host $stringIn
  Write-Host $underLine -ForegroundColor Red
} 

New-Underline "abcd" -char "-"
New-Underline 
"原辰徳"
"AAAAA"
 | New-Underline

image

2011年12月27日火曜日

◆関数の作り方?

PowerShell: ◆$inputの使い方の内容でまだ悩んでいる。

色々考えてみたのだが、結局のところ今回の問題は、

  1. Get-Process | select id,name | Out-GridView

こんな処理の、

  1. select id,name | Out-GridView

この部分を纏めたいというところから来ている。

単純に関数にしてもダメだし、関数を入れ子にしても結局同じ問題にぶつかるし・・・。
なんで、PowerShellとあろうものがこの程度のことができないのだろう、と暫く考えもしたのだが、そもそもやろうとしていることがPowerShellの思想にそぐわないのでは無いかと思えてきた。

出力系のコマンド(Out-xxxxやFormat-xxxx)は独立して使うべきものなのではないかと。

  1. Get-Process | select id,name | Out-GridView

これはこのまま使うべきものという方針にしよう。

2011年12月17日土曜日

◆ブログを書く環境を整える

PowerShellとは直接関係のない話題です。

このブログはGoogleのBloggerというやつを使っていて、MSのWindows Live Writer(WLW)をPCにインストールし編集しています。

WLWはWordPad程度の編集機能を持っていて、記事を直接投稿編集できるので重宝しています。(画像がコピペできるので便利です)

PowerShellのブログの他に別の独り言用のブログも持っているのですが、そちらのほうはたまにC#のソースとかをメモしておくので書式整形の為に「Syntax HighLighter」というツールをプラグインとして使用していました。

PowerShellのブログにもHTMLを載せるときなどはたまに使ったりしていたのですが、いつの頃からか(1ヶ月以内だと思うのですが)、PowerShellのサイトで「Syntax HighLighter」が機能していないのに気づきました。

もともと、私の仕事はWeb系の開発とは無縁なので正直言ってその手の知識が全くありませんし、単にブログが書ければ良いだけなので、「Syntax HighLighter」の仕組みも理解していません。

ブラックボックスとして使うツールは、それが正常に機能している限りにおいては非常に便利で重宝するのですが、ひとたび動かないとなると全く手が出せず困ってしまいます。

そこで、今回仕方なく色々と自分なりに(解らないながらも)調べてみたのでメモしておきます。

Syntax HighLighter

たまたま、WLWのアドオンにあったので特に詳細を調べもせず導入。Webでよく見かける書式だったので比較的メジャーなのかと思っています。

インストールして使ってみると、それだけでは書式が有効にならずBlogger側のテンプレートに追加設定が必要な模様。
この追加設定をしてくれるサイトがあって意味もわからず使わせてもらったところ、うまく行ったので今までその設定で使用してきました。
MTG Blog: ◆Windows Live Writer で SyntaxHighlighterプラグインを使ってBloggerに投稿する

結局この安易な導入が仇になって、Blogger側にどんな設定が追加されたのか分かっていないので、今回のトラブルに手が出せないという状況に陥っている。
今回、書式が適用されないトラブルが発覚した為、もう一度上記サイトで設定をしようとしたのだが、おそらくブラウザのバージョンが上がっているせいでIEでもFireFoxでも動いてくれない(TT)

仕方なく、ネットで調べてみるとどうもサイトのヘッダーに「Syntax HighLighter」用のJavaScriptを貼りつけておく必要がある模様。
スクリプトは以下のサイトから取得可能。
image

サイトのテンプレートを更新するには「バックアップ」機能で一旦ローカルに持ってきて編集した後アップロードすれば良いとのこと。

早速実際試してみたのだが、どうにもこうにもアップロードがうまくいかない。
こんなエラーがBloggerから表示される。
image

素人判断だが、追加部分は特に閉じられていない部分はなさそうなのだが・・・。
試しに、ダウンロードしたテンプレートをそのままアップしてみるとエラーは出ないので、やはり何か中身に問題があるのだろう。

考えていても分からないので、ここは力技で原因を探っていくこととし、追加内容を半分、また半分と減らしていきエラーが出なくなるまで減らしていく。
すると、なんと追加部分を全部削除してもエラーが出るでは無いか(><)。
ダウンロードしたファイルを開き、何もせずに更新するとやはりエラー。
もー、訳がわからん。

ん~、何か文字コード絡みだろうかと考え、メモ帳で名前を付けて保存とやるとちゃんとUTF8と認識している。
半分諦めかけた後、もしやと思い「さくらエディタ」で開いてみると、こちらではSJISと認識されている。
なんだかよく分からないが「さくらエディタ」で修正しそのままSJISで保存しアップロードすると今度はうまくいった。(今回はここら辺が主眼ではないので深くは追求しない)

さて、これで直ったのだろうかと思い、ブログを見てみると残念ながら書式は変わらない。

またも、ネットをさまよい続けたのだが、どうも「Blogger、Windows Live Writer、SyntaxHighLighter」の組み合わせがあまり見つからない。
Google製なら安心だろうとBloggerを使い始めたのだが、それほど使われているわけでもなさそうだ。

WLWを使わない、BloggerとSyntaxHighLighterのみの組み合わせ例は幾つか有ったのでそのとおりHTML直書きしてやってみるとうまく行った。
そこで、WLWのHTMLを確認してみたところ以下のようなクラス指定となっているのだが、
<pre name="code" class="c#">
ネットの例では、
<pre class="brush: c#;">
となっている。

ん~、ここまでで既に久々に取った休みをほとんど費やし日も暮れてきた。
だいぶ嫌気が差してきたがここで止めてはすべてが無駄になるのでもう一粘り。

なんとなく、いろいろ調べていて思うに、どうもバージョンの違いが影響しているように思える。
私が使っているWLWのプラグイン版Syntax HighLighterはバージョン1.5あたりっぽいのだが、純粋なSyntax HighLighterとしてのバージョンは既に3.Xあたりまで出回っているっぽい。
おそらくネットでの説明は新しいバージョンの話なのだろう。

WLWのプラグインの一覧をよくよく見るとSyntax HighLighterのバージョン2というのが存在していたので、それをインストールしてHTMLを確認してみたところちゃんとネットに挙がっていた方のHTMLが展開された。
それを、先のJavaScriptを指定したテンプレートのサイトにアップしたところ問題なく書式が表示された。

やはり、バージョンアップによりクラスが変更になり、テンプレートに指定すべき内容も変更になったということなのだろう。

さて、これで新たにアップする場合は問題なく書式付けされるようになったが、過去のブログは書式付けされないままである。
あとは、旧バージョンのクラスに対応したテンプレートへの追加内容が判れば解決となるのだが、これがまた見つからない。
既にネットの情報は新しいバージョンの情報であふれていてなかなかたどり着けない。

しからばと、独り言用のブログの方は旧バージョンの記述でもうまく表示されているので、そちらのテンプレートと比べてみれば見つかるのではと思ったのだが、Headerを比べた限りにおいては違いが見つからないのである。

やむなく、過去にPowerShellのブログでSyntax HighLighterを使ったのは数えるほどしか無いはずなのでとりあえず放置。(誰か情報が有ったら教えて下さい)

これで終わりにしようかとも思ったのだが、今回調べてみて、どうもSyntax HighLighterの仕組みは気に入らない。
ページを表示する段になって動的にスクリプトでタグ付するということは、過去に書いた何十何百という記事の書式がいっぺんに消え去る可能性があるということである。
書き手側としては一旦アップして内容確認しOKだったらそこで確定して欲しいと思うものでは無いだろうか。
ソースの書式というものは、サイトテーマのようにたまに気分で変えてみるという類のものでは無いと思うのだ。
Syntax HighLighterの仕掛けが好きな人も居るとは思うが、少なくとも私には好ましい仕様では無い。

そこで、Syntax HighLighterとは決別し違うツールを探すこととした。
もう、ここまで来ると若干意地になってきたのでWLW用の書式設定ツール(プラグイン)を順繰りに試してみた。(以前と比べるとだいぶ種類が増えている)

幸い、Syntax HighLighter以外はどれもソースコードをWLWに貼りつける段階で書式設定をしているようだ。

私が、ツールに求める機能は以下のとおり。

  1. サイトの書式(テーマ)に影響を受けない。
    サイトの背景が白から黒に変わったらソースの黒文字が読めなくなったという事態にはならないでほしい。(即ち背景付きで張り付いて欲しい)
  2. 貼りつけた後に間違いに気づいてちょっとだけ直したいなんてこともあるので、修正可能であること。
  3. 折り返すか横スクロールするか指定できればベター。
  4. 2番ができれば多分出来ると思うが、部分的にマーカー付け(ハイライト表示)が出来れば嬉しい。(マーカー機能自体はWLWにあるので編集が出来ればOKなはず)

PowerShellにも対応していればベターだが、PowerShell自体は、いつも別の機能で書式設定しているので必須ではない。

とりあえず、順番に試してみる。(多分人気順に並んでいる)

プラグイン評価

Windows Live Writer Plug-ins - Insert Code for Windows Live Writer

<貼り付け画面>
image

<結果>
image

微妙にコツが要るが、修正は可能。
背景あり。
折り返しのみ。
ハイライト可能。

Windows Live Writer Plug-ins - Code Snippet plugin for Windows Live Writer

<貼り付け画面>
image

<結果>
image

修正不可。(一旦貼りつけたものを後から削除するのも若干こつが必要で面倒)
背景あり。
スクロールのみ。
ハイライト不可。

Windows Live Writer Plug-ins - Paste from Visual Studio

<貼り付け画面>
無し(クリップボードから直接)

<結果>
image

修正可能。
背景なし。
折り返しのみ。
ハイライト可能。

Windows Live Writer Plug-ins - Insert Formatted Clipboard

インストール不能。(WLWのバージョンが合わないみたい)

Windows Live Writer Plug-ins - Source Code Formatter

<貼り付け画面>
image

<結果>
image

編集不可。
背景あり。
折り返しのみ。
ハイライト可能。(プラグインの機能としてハイライトできるが、行単位かつ1箇所のみ)

Windows Live Writer Plug-ins - Paste As Visual Studio Code

<貼り付け画面>
無し。(クリップボードから直接)

<結果>
image

編集不可。
背景あり。
折り返しとスクロールの指定が可能。
ハイライト不可。

(タイトル表示可能、高さ調節可能)

Windows Live Writer Plug-ins - Clipboard Live

なんかちょっと残念な感じ。
image


 

結論

他にもまだまだたくさんあるのだが、ダウンロード数が圧倒的に少なくなるので、とりあえずここまでで決めたいと思う。

機能的には最初の「Insert Code」が良いのかもしれない。ダウンロード数も圧倒的に多いので安心感もある。
これで横スクロールのオプションがあれば完璧だったのだが・・・。
ふと思い立ち、ならば横スクロール機能を自分で追加しようかと、ちょっHTMLをいじってみた。
他のツールで横スクロール可能なやつを参考にすると、要は<div>を入れ子にして外側が物理サイズ、内側が論理サイズと行った感じにするようだ。
あとは、適当にスクロールをAuto指定にしてあげれば「Insert Code」も横スクロール可能にできるた。
あとはこれをテキストエディタのマクロとかで組んでしまえば実用もできそう。
っと考え始めて気づいたのだが、横スクロール機能を組み込むと編集ができなくなるのだ。
ん~、ココらへんはWLWの仕様も絡むのでいかんともしがたいのかも。

すべての機能を満たすのが無理なのであれば、編集を諦めて「Paste As Visual Studio Code」かなぁというきがしてきた。
唯一、横スクロールと折り返しが選択できて、ソースにタイトルも付けれて、縦のサイズも指定できる。
表示に関して言えば文句なし。
実際、編集する頻度はかなり低いことを思えば表示優先とするのは良い選択に思える。
どうしてもという時は貼りつけ直しでも良いし、ハイライトについてはHTML直書きでも良い。
最終的な整形結果はどのツールも同じようなものなので「Insert Code」との併用でも悪くはない。

そして嬉しいことに、「Paste As Visual Studio Code」はVisual Studioという名前を冠してはいるが、「PowerGUI」のソースも貼り付け可能なのだ。

PowerShellのサンプル
  1. Get-Command -type Cmdlet | %{
  2.     $help = New-Object psobject | select name,lineCount,content
  3.     $help.name = $_.name
  4.     $help.content = Get-Help -Name $_.name -Full | Out-String -Stream
  5.     $help.lineCount = $help.content.Count
  6.     $help
  7. } | select name,lineCount | sort lineCount -Descending

要は、自分で書式付けしているわけではなく、基の書式を再現しているだけなのでソース側のコピー形式が一致していれば良いのだろう。残念ながらPowerShellISEは貼り付けできなかったが、たしかV3でココらへんの形式が変わってWordとかには書式を保って貼り付けられると有ったはずなのでV3ではうまくいく可能は大きいと思う。

ということで、メインは「Paste As Visual Studio Code」、ハイライトしたいときは「Insert Code」というパターンでしばらく試してみようと思う。

あー、疲れたァ。休み丸つぶれ(TT)


その後「Paste As Visual Studio Code」を使っていくと日本語が使えないことが判明。

だめだこりゃ・・・。

2011年11月3日木曜日

◆Powershellへの誤解?

昨日ネットを眺めていてPowershellに若干否定的な話しが載っていたので検証してみた。
まぁ、1.0の頃の話なので当時は今ひとつな部分もあったのかもしれないが。(私自身はすでに記憶があまりない)

否定的な部分を纏めると

  1. 無償の開発環境が無い
  2. function呼び出しの文法が違う、間違ってもエラーにならない
  3. 存在しないプロパティを参照してもエラーにならない
  4. else ifとスペースを開けるとエラーになる
  5. エスケープの文法がC#と違う
  6. ExcelのOpenが使えない
  7. 慣れた言語で開発したほうが早いのでPowershellを様子見のほうが良い

とこんな感じでしょうか。

ちょっと検証してみましょう。

  1. 開発環境についてはすでにISEが標準添付されていますので問題は無いでしょう。(現バージョンでは確かにインテリセンスとまでは行きませんがV3に期待しましょう。そもそもC#だって最初は無償の環境はなかったような・・・。)
    私もいつもお世話になっているPowerGUIもありますし。
    個人的にはタブ補完だけでもそれほど苦痛では無い気がしています。
    オブジェクトメンバーなども、”aaa”.とやると確かに何も出てきませんが一旦変数に入れてやれば(要は実行されれば)問題なく表示されます。
    私などは逆にC#を使っているとGet-Menberしたくなります。(^^;
  2. function呼び出しについては確かに最初は紛らわしいかもしれませんが()が不要というのはタイプ量が減るので慣れればメリットでは無いでしょうか。C#などもバージョンを重ねるにつれタイプ量を減らす方向になっていますし。
    また、間違ったときにエラーにならないというのも、要はPowershell的には間違っていないのだから仕方が無いとも言えます。
    Powershellの引数は明示しなければオプションなので省略可能です。
    なので引数を2つ指定したつもりのmyFunc($a,$b)というのは最初の引数に変数aとbの配列、2つめの引数は省略と解釈されてしまいます。
    逆に、C#な人であれば変数にちゃんと型指定をすればエラーになると思いますし。
  3. これについては、逆にそのことによって多大な恩恵を受けているのでトレードオフでしかない。
    また、現時点では「Set-StrictMode -version 2.0」とやるとそこら辺をチェックしてくれる。この設定をして、ファイルとフォルダが混在した場所で
    dir | %{$_.length} とやってみた上で判断すると良いかもしれない。
  4. これはC#でThenと書くとエラーになるのは許せんというのと変わらないような・・・。
  5. Powershellはファイルを扱うことが多いのでパスの区切り文字に使われる¥を避けたは懸命では無いでしょうか。
  6. これは現時点では大丈夫な気がしますし当時でもPowershell自体の問題には読めなかったのですがどうなのでしょう。
  7. これについては、自分でBESTと思うものを使えば良いのだと思います。
    ただ、部下に「このフォルダのファイル一覧をテキストに落としといて」と頼んでC#でプログラミングし始めたら「おい、おい」と言うとは思いますが。

よく言われることですが「銀の弾丸」は存在しないわけですから、適材適所で道具を使い分けるのが肝心と言う所ではないでしょうか。
どこにどの道具を使うかを見極めるのが技術者としての1つのスキルだと思います。

あくまでも個人的意見ですが、Powershell好きとしてちょっと擁護してみました。

◆Powershellリソース

巨人がクライマックスシリーズにあっさり敗れて今年も楽しみがなくなってしまったのでなんとは無しにネットサーフィン。

ちなみに、Powershellで国内を検索すると何が出るのだろうと、ふと検索してみた。

栄えある1位はWikipedia

2位はHIROさんのPowerShell from Japan!! Blog « PowerShell 情報発信ブログ
かなりのボリュームの記事がある。一度ゆっくり読んでみたい。
(ホームページの先頭が広告だらけなのがちょっと・・・・)

3位はいつもお世話になっている牟田口さんのPowerShell基礎文法最速マスター

4位に本家スクリプトセンターWindows PowerShell でのスクリプティング
もう少し頑張って欲しい・・・。

以下、@ITやCodeZineなどのIT解説サイトの記事が続いているが、比較的初期の頃の紹介的内容で面白みには欠ける感じ。

ちょっと下がっていくと、最近WPFの記事でお世話になっている岩永さんのWindows PowerShell。古い記事ながら文法的な観点ですごくまとまっている。

一番最初に買った「Powershell宣言」の著者吉岡さんのPowerShell Memo
最近はあまり投稿が無いようで残念です。

C#界の重鎮、宇宙仮面さんのPowerShell
あらら、・・・・。

 

全体的に最初の頃の紹介記事や、触ってみた的な内容が多く、今現在あまり盛り上がっている感は無いような・・・。

世の中的にはどうなんでしょうねぇ・・・。

2011年8月27日土曜日

◆Package Manager Console

VisualStudio2010にはJQueryが標準で組み込まれている。
バージョンは今のところ1.4.4のようだ。
巷ではすでにだいぶバージョンが進んでいて1.6.2というのが使えるようだ。

VisualStudioではバージョンアップが簡単にできるように「Add Library Packager Reference」なるツールが組み込まれて、プロジェクトのコンテキストメニューから起動することができる。
image

image

ここからJQueryを検索して「Install」を選べば現在のプロジェクトに簡単に最新バージョンの「JQuery」が組み込まれる。

ただし、今回試したところJQueryはConsoleからのインストールを要求された。
こちらはVisualStudioに組み込まれたPowershellコンソールという感じのツールで、「ツール」「Library Package Manager」「Package Manager Console」とたどるとIDEのペインの中にPowershellのコマンドプロンプトが表示される。

image
image

これには予めPackage管理用のModuleが組み込まれていて、
Install-Package JQuery
とやるだけで最新パッケージがインストールできる。

PowershellはMS製品すべての管理プラットフォームとしてなくてはならないものになってきているようだ。
この環境ではタブキー補完もポップアップで表示されるなどPowershell環境としても進化している。
image

2010年11月13日土曜日

◆追加ソフト無しにSkyDriveをエクスプローラにマウントする

これを使ってPowershellで何かできないかな。

MTG Blog: ◆追加ソフト無しにSkyDriveをエクスプローラにマウントする

という事で、エクスプローラからSkyDriveにアップロードするときは拡張子が制限されている。
そこでアップロードするときに拡張子を「xls」に偽装し、ダウンロードするときに元に戻すというスクリプトを作ってみた。

簡単に出来るかと思ったのだがやけに苦労した(笑)
スクリプトはこんな感じ。

$skyDrivePath = "\\a1gkoa.docs.live.net@SSL\DavWWWRoot\XXXXXX\^.Documents"
$deskTop = [environment]::GetFolderPath("desktop")
$ext = "xls","xlsx","doc","docx","ppt","pptx","txt"
$pattern1 = ".+@SSL.+\\(.*\.\w*)\.\w*"
$pattern2 = ".*\\(.*\.(\w*))"
$mode = "Put"

$path = Split-Path $args[0]
$path = $path.replace("\.Documents","\^.Documents")
if($path -eq $skyDrivePath){$mode = "Get"}

if($mode -eq "Get"){
    foreach($file in $args){
        $file = $file.replace("\.Documents","\^.Documents")
        if($file -match $pattern1){
            Copy-Item $file ($deskTop + "\" + $matches[1])
        }else{
            Copy-Item $file $deskTop
        }
    }
}else{
    foreach($file in $args){
        if($file -match $pattern2){
            if($ext -contains $matches[2]){
                Copy-Item $file $skyDrivePath 
            }else{
                Copy-Item $file ($skyDrivePath + "\" +  $matches[1] + ".xls") 
            }
        } #拡張子の無いファイルは無視
    }
}

これを以下のようなバッチで呼んであげる。

@echo off
powershell  "& 'C:\TOOLS\Copy2Sky-Item.ps1' "%*""


そして、このバッチのショートカットをSendTo(送る)フォルダーへ登録する。
ちなみに、SendToフォルダーを開くには「ファイル名を指定して実行」からShell:SendTo と打てば良い。(Windows7)

送り元がSkyDriveのパスだったらDesktopへ決め打ちでダウンロード(コピー)、そうで無かったらSkyDriveのDocumentsフォルダへアップロード(コピー)している。

SkyDriveのWebDavのパスにはカレット「^」を含んでいて、これがバッチファイルに引数として渡ったときに欠落してしまうようだ。(欠落するファイルとしないファイルがあって色々と悩んだ)
そこでコピーするときに無理やり「^」を補っている。

また、$extで保持しているSkyDriveが許容する拡張子は全てを調べたわけでは無い。とりあえず自分で使いそうなものだけ指定した。
上書きなどもチェックしていない。
正規表現もとりあえずうまくいっているレベルだと思う。

さしあたって、ファイル名に空白を含む場合はエラーとなる。