タグ: Powershell

  • Powershellからメールを送信する方法

    Windows 7 や Windows Server 2008 R2などでは、初期状態ではTelnetクライアントが機能としてインストールされていないため、Telnetを使ったメール送信テストが使用できない。

    Windows 7 や Windows Server 2008 R2 などでは、標準でインストールされている Powershellにメール送信コマンドがあり、それを使うことで代用できる。 難点としては、エラー時のコードがわかりにくいこと、ポート番号を変えられないこと。

    Powershellでメールを送信するには、Powershellを立ち上げて、 [[Send-MailMessage]] コマンド(コマンドレット)を実行する

     
    Send-MailMessage 
     -To 宛先のメールアドレス 
     -From 送信元のメールアドレス 
     -SmtpServer SMTPサーバ(FQDNやIPアドレス)
     -Subject "件名をダブルクォーテーションの中に書く"
     -Body "本文をダブルクォーテーションの中に書く"
    

    認証の無しでよい場合は、以下のようになる

     Send-MailMessage -To hogehoge@xenos.jp -From hoge@xenos.jp -SmtpServer smtpserver.xenos.jp -Subject "TEST MAIL from Powershell" -Body "This is test mail."
    

    また認証とSSLでのアクセスが必要な場合は下記のオプションを付ける。

     -Credential ユーザ名
     -UseSsl
    

    Telnetを使ってメールを送るのに比べたら、Powershellを使ってメールを送る方が簡単かも。 これでSMTPサーバに接続用の穴をあけたとか、FWに穴をあけたとか、 そういうことの確認が簡単にできる。

    ■参考

  • Powershellがコード“-65536”を返す

    Windows Server 2008 R2環境で、Powershellをリモート実行している。この環境で、稀にPowershellがリターンコード“-65536”を返して、異常終了する。

    状況としては、リモート実行先のPowershellでスクリプトが動作しその動作で落ちるのではなく、そもそもリモート先でPowershellのスクリプトが実行されていない状態。呼び出し(起動)に失敗したときに、コード“-65536”が返されている。

    Powershellのコード“-65536”は、リモート実行先でPowershellの起動に失敗した際に返されるエラーコード。

    もし、必ずこのコードが返ってくる場合は、Windowsサーバで、Powershellのリモート実行が許可されていない可能性がある。また、64bit環境の場合は、32bitと64bitの両方にPowershellが入っていて、起動するPowershellのパスが間違っているなど。64bit実行なのに、32bitのPowershellが呼び出されているなど。

    ■参考?
    http://www.windows-noob.com/forums/index.php?/topic/4052-trouble-running-powershell-as-advertisement/

  • xyzzy でPowerShellを書くときに便利なPowerShell-Mode

    Powershell用のModeのモードがあった。

    じゃわてぃーのxyzzy的な何か:http://kazy111.info/xyzzy/

    使い方は、ダウンロードしたファイルを解凍して、xyzzyのフォルダのetcとsite-lispにそれぞれ解凍したファイルを保存する。
    あとは、、、xyzzyを起動するときにpowershellmodeが読み込まれた。
    いろいろとやっているうちに読み込まれたので、、、なんとも書けない。

    実際に使ってみると、
    変数の部分やコマンドレットの部分の色を変えてくれるので便利。
    WindowsについているPowerShellの開発環境でもいいのだけど、
    スクリプトを読んだり、簡単な変更をするだけなら、
    使い慣れたテキストエディタの方が好きだ。

  • Powershellにエイリアスを追加する方法

    WindowsのPowershellを使っていると、間違えてlsとかpwdとか叩いてしまう。これらは、最初からPowershellの内部で対応するコマンドにエイリアスが切られているので 問題なく実行できる。

    でも、どうせならCUIから簡単にxyzzyを起動したい。ついでに間違えてemacsと入力したときにxyzzyを起動させたい。プログラムにパスが通っていれば、エイリアスで指定しなくても起動するがめんどくさいのでAliasに登録する。

    ■エイリアスの登録方法

    Set-Alias  エイリアス  コマンド
    

    xyzzyをエイリアスに登録する場合は以下。(xyzzyは、Cドライブ直下のbinに保存)ついでに、emacsでxyzzyが起動させるようにする。

    Set-Alias xyzzy 'C:\bin\xyzzy\xyzzy.exe'
    Set-Alias emacs xyzzy
    

    これで、xyzzy ファイル名 とか叩けば、そのファイルがxyzzyで開くようになる。簡単に起動できるので便利。

    だが、ここまでだとPowershellを終了させると消えてしまう。AliasをExportしてImportするか、起動時にプロファイルを読み込ませる方法がある。ちょっと調べてみたが、プロファイルを読み込ませるのはめんどくさそう。

    ■現在のエイリアスの確認方法

    Aliasと入力する。

    ■エイリアスの削除方法

    エイリアスの削除もコマンドから行うが、Remove-Itemという汎用的なコマンドから行う。(Remove-Itemはファイルやフォルダ、オブジェクトの削除に使うコマンド)

    Remove-Item Alias:エイリアス
    

    先に追加したemacsのエイリアスを削除するコマンド

    Remove-Item Alias:emacs
    

    この要領で便利なエイリアスを作ったり削除できる。