PowerShellのルールについて

このQ&Aのポイント
  • PowerShellのコマンドレットを使用して特定の構文を実行する場合、コマンドレットから実行するとエラーなしで実行できますが、ISEから実行するとエラーが発生します。
  • 具体的には、特定の関数定義やコマンドの実行において、コマンドレットからは正常に動作するのに対して、ISEから実行するとエラーが発生します。
  • このような違いが発生する理由は、コマンドレットとISEが異なる環境や設定を持っているためです。コマンドレットは単体で動作するために最適化されており、一方でISEはスクリプトの実行やデバッグをサポートするために様々な要素が組み込まれています。そのため、環境や設定の違いにより動作に差が生じることがあります。
回答を見る
  • ベストアンサー

PowerShellのルールについて

PowerShellのルールについて PwoerShellのコマンドレットから以下の構文を実行すると、 エラーなしで実行できますが、ISEの方から実行するとエラー となってしまいます。 この違いはなんなのでしょうか? コマンドレットから実行 >funcion test { return $input } >1..4 | test 1 2 3 4 またコマンドレットからget-chikdItem Function:を 実行すると、定義済みの関数としてtestがでてきます。 ISEから実行すると > function test {retrun $input } > 1..4 | test 用語 'retrun' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認 してから、再試行してください。 発生場所 行:1 文字:22 + function test {retrun <<<< $input } + CategoryInfo : ObjectNotFound: (retrun:String) []、CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException となります。また、ISEからget-childitem Function:で確認すると、 testという関数は出てきません。 コマンドレットとISEは一体どういう関係なのでしょうか??

質問者が選んだベストアンサー

  • ベストアンサー
  • kteds
  • ベストアンサー率42% (1876/4424)
回答No.2

> コマンドレットとISEは一体どういう関係なのでしょうか?? 同じ機能です。操作画面(ツール)が違うだけです。 なお、各所で「コマンドレット」という誤った記述がありますが「コマンドライン」です。 コマンドレットとはpowershellのコマンドのことです。 --- 今回の回答は「入力ミス」であることが明らかです。 単純なエラー程度は自分で理解してください。 「一行目22文字の「retrun」というオブジェクトは無い、つまり「return」をインプットミスしている] と指摘しています。 --- あたりまえですがエラーメッセージが出た場合は、まずは「自分が間違っている」と思って原因究明してください。 --- 質問とは関係ありませんが、質問文の コマンドレットから実行 >funcion test { return $input } という部分の「funcion」にも入力ミスがあります。( 「t」が抜けている) このままではエラーになります。 正しくは「function」です。 読んでいる側は書いてあることをそのまま信じますので、入力ミスは訂正してください。

koro01
質問者

補足

ケアレスミスでしたか・・・失礼しました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

retrun って何?

koro01
質問者

補足

なんでしょうか??

関連するQ&A

  • PowerShellのスクリプト実行について

    PowerShellのスクリプト実行について PowerShellの勉強をしていますが、スクリプトを実行できません。。。 なんか、スクリプトの環境変数を設定するようですが、どこにも 設定方法がないです。。。。 もちろん、Set-ExecutionPolicy Unrestrictedは実行してあります。 以下日付と時間を表示するだけのスクリプトです。 ---------test.ps1--------- get-date get-time ---------------------------- スクリプトファイルの置き場所 ⇒ C:\script-test\test.ps1 ちなみに、スクリプトファイルを置いたディレクトリに移動して 実行しても、以下のようなメッセージが出て実行できませんでした。。 用語 'C:\script-test' は、コマンドレット、関数、スクリプト ファイル、または操作 可能なプログラムの名前として認識されません。名前が正しく記述されていることを確 認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してく ださい。 発生場所 行:1 文字:15 + C:\script-test <<<< .\test.ps1 + CategoryInfo : ObjectNotFound: (C:\script-test:String) []、Comma ndNotFoundException + FullyQualifiedErrorId : CommandNotFoundException どなたかご教授下さい。

  • powershell コマンドレッドの構文

    こんにちは。Powershellを勉強しようとしているものです。 Get-Help関数を使ってGet-ChildItemを引いたところ、構文が表示されました。 この構文の意味がわかりません、どのような意味になるかお教え頂けないでしょうか? まず[ ]は省略可能ということでしょうか? <string>はストリング型のパラメーター値を受け付けるということでしょうか? その場合、<string[]>はどういう意味になるでしょうか? どうぞ、宜しくお願いします。 >Get-Help Get-ChildItem 構文 Get-ChildItem [[-Path] <string[]>] [[-Filter] <string>] [-Exclude <string[]>] [-Force] [-Include <string[]>] [-Name] [-Recurse] [-UseTransaction] [<CommonParameters>]

  • windows power shell icacl

    windows power shell 2.0で 以下のコマンドを実施したいのですが エラーで実行できません。 dosからは実行できるのを認識していますが windows power shell 2.0での実行方法を教えて下さい。 icacls "c:\aa\" /grant "Everyone":(OI)(CI)F エラー 用語 'OI' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正 しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。 発生場所 行:1 文字:37 + cacls "c:\aa\" /grant "Everyone":(OI <<<< )(CI)F + CategoryInfo : ObjectNotFound: (OI:String) []、CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

  • PowershellでCLIとISEの結果が違う

    ISEでスクリプト作成しています。 ISEは正常に動作していて正しい結果が得られるのですが、 同じスクリプトを実際にコンソールの方で実行すると違う結果になります。 例えば以下の様な簡単なスクリプトだと、 ISEでは100、コンソールでは1が表示されます。 ------------------------------------- $a = 1 function test{   $global:a = 100 } test Write-Host $a Start-Sleep -s 10 ------------------------------------- 原因と解決策はありますでしょうか? $PSVersionTableで調べたところバージョンは4.0です。

  • PowerShellのtrapの例外処理について

    初歩的な質問ですが、PowerShellのtrapの例外処理ついて教えて下さい。 以下のようなスクリプトがあります。 ------------------------------------------------- test1.ps1 trap [Exception] { echo "trap!!" } 5/0 echo "go go" ------------------------------------------------- test2.ps1 trap [Exception] { echo "trap!!" } function fun($num) { 5/$num } fun 0 echo "go go" test1.ps1はtrapに遷移しないのですが、test2.ps1はtrapに遷移します。 どうしてなのでしょうか。 コマンドレットでエラーが発生した場合ののエラーハンドリングであって 「5/0」のような処理はコマンドレットでのエラーではないのでハンドリング されないのでしょうか。 では、なぜ、関数するとハンドリングされるのでしょうか。

  • WPS3.0でのGet-childitemの挙動

    先日、Windows power shell 3.0をインストールし、バージョン2.0で利用していたスクリプトを実行したところ以前と挙動が変わり、目的の処理ができなくなってしまいました。 具体的には、カギ括弧"[]"が含まれるパスを対象に-Recurse付きでGet-childitemを実行した場合です。 例: > Get-ChildItem -LiteralPath 'E:\Test\[15-4]' -Recurse Get-ChildItem : 指定されたワイルドカード パターンは無効です: [15-4] 発生場所 行:1 文字:1 + Get-ChildItem -LiteralPath 'E:\Test\[15-4]' -Recurse + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Get-ChildItem], WildcardPatternException + FullyQualifiedErrorId : RuntimeException,Microsoft.PowerShell.Commands.GetChildItemCommand カギ括弧がワイルドカードとしてチェックが行われ、5以上4以下が指定されているのはおかしい、と言うエラーメッセージが出ているのだと思われます。 powershell.exe -version 2を実行して、環境をWindows power shell 2.0に切り替えてから同一のスクリプトを実行するとワイルドカード扱いとならず、期待通りの動作となります。 > Get-ChildItem -LiteralPath 'E:\Test\[15-4]' -Recurse ディレクトリ: E:\Test\[15-4] Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2012/09/13 20:02 a ディレクトリ: E:\Test\[15-4]\a Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2012/09/13 19:51 aa Windows power shell 3.0環境でも、次のケースではエラーになりません。 -Recurseが無い場合: Get-ChildItem -LiteralPath 'E:\Test\[15-4]' ディレクトリ: E:\Test\[15-4] Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2012/09/13 20:02 a -Recurseは有るが、カギ括弧の中の"-"直前・直後が前<後となっている場合: Get-ChildItem -LiteralPath 'E:\Test\[15-6]' -Recurse ディレクトリ: E:\Test\[15-6] Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2012/09/13 20:03 c ディレクトリ: E:\Test\[15-6]\c Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2012/09/13 19:51 cc 行いたいことは、下位フォルダを持っている(かもしれない)数十から数百のフォルダに対して、中身(フォルダ中のフォルダ数、.docなど特定種類のファイルの存在、下階層にフォルダしかない等)を判断し、フォルダの条件ごとに適切な場所にフォルダを移動、不要なものを削除する事です。 フォルダ名は変更できず、スクリプトも既に組んでいるので大きな変更を加えずに済むと助かります。 優先順に次の事柄を教えて頂けると助かります。 1.Windows power shell 3.0で”[15-4]”のような文字列を含むフォルダの下位階層のオブジェクトを取得する方法。 2.上記が困難な場合、Windows power shell 3.0をアンインストールせずに、デフォルトの実行環境をWindows power shell 2.0環境に固定する方法。 3.Windows power shell 3.0で上手くいかない理由。(バグ?、仕様変更?、本来の仕様に修正?) よろしくお願いします。

  • PowerShellでTXTを1行ごと読込んで処理

    PowerShellでの処理で教えてください。 C:\list\loglist.txtというファイルに、 C:\Documents and Settings\mama\My Documents\Shell\log C:\share\LOGS C:\diaglog というように、ログフォルダまでのパスが書いてあるファイルがあり、この中身は、時々変更されます。 このテキストを1行ずつ読み込みながら、各フォルダの配下にあるサブフォルダを含めたフォルダ内に、.logというファイルがあり、そのファイルサイズが0でなければ、ファイルを別フォルダへコピーして、元のファイルは削除するということを行いたいのです。 そこで、下記のようなスクリプトを書いてみましたが、エラーとなってしまいます。 $day = Get-Date -format yyyyMMdd $LOGPATH = "C:\list\loglist.txt" $txt = Get-Content $LOGPATH $sr = New-Object System.IO.StreamReader($txt, [System.Text.Encoding]::UTF8) while (($line = $sr.ReadLine()) -ne $null) { #0じゃないログを取得 $fname = Get-ChildItem -path $ff -Recurse | Where-Object {$_.Length -gt 0} # ログをバックアップフォルダへコピーしてリネーム     ・     ・     ・     ・ この#0じゃないログを取得にまで至らず、エラーがでます。 エラーは New-Object : "2" 個の引数を指定して ".ctor" を呼び出し中に例外が発生しました: "指定されたパスのフォーマットはサポートされていません。" 発生場所 行:×× 文字:×× + $sr = New-Object <<<< System.IO.StreamReader($txt, [System.Text.Encoding]::UTF8) + CategoryInfo : InvalidOperation: (:) [New-Object]、MethodInvocationException + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand [System.Object[]] に 'ReadLine' という名前のメソッドが含まれないため、メソッドの呼び出しに失敗しました。 発生場所 行:×× 文字:×× + while (($line = $sr.ReadLine <<<< ()) -ne $null) + CategoryInfo : InvalidOperation: (ReadLine:String) []、RuntimeException + FullyQualifiedErrorId : MethodNotFound パスを呼び出す元になっている『C:\list\loglist.txt』は、他の担当者が作成したものですが、パスの最後に\を入れても変わりませんでした。 PowerShellISEで、$line だけを実行すると、パスはテキストの1行目のC:\Documents and Settings\mama\My Documents\Shell\logが取得できています。 コードはhttp://codezine.jp/article/detail/3592?p=2を参考に作ってみたのですが、まだまだ初心者のためどこを修正すればいいのかわからず途方にくれています。 コードの修正か、もしくは、もっと別な方法などありましたら、ご教授をお願いします。

  • powershell で配列を順次に扱うには?

    powershell で配列を順次に扱うには? $aaa = Get-ChildItem -Path "c:¥Program Files" -name として、 $aaaにプログラムファイルズの下をオブジェクト形式で退避したとします。 $aaaを見てみると、 Adobe Hidemaru Java Lhaplus Microsoft Office などが入っています。 この$aaaをインプットとして、 ForEach-Object -InputObject $aaa -Process { echo ここに何を書けば良いですか? } アウトプットが下記のように$aaaの中身になれば良いです。 Adobe Hidemaru Java Lhaplus Microsoft Office ※このプログラム自体に意味はありません。 一旦退避したオブジェクトを順次に読むテストをしたいだけです。 これができたら、 -name オプションを外して、Mode,LastWriteTime,Length,Name をそれぞれ個別に echo してみたいです。

  • Powershellのparamについて

    Powershellについて質問いたします。 自分で確かめた限りですが、paramとargsは同時に使用できないのでしょうか? 使用の仕方は $args.length param($引数1,$引数2.$引数3) といった形で、paramの前にargs定義があると下記のエラーがでて 用語 'param' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。 逆にparamがargsの前にあると値が取れていないみたいです。(args.lengthの値が0) Paramでlengthのようなことができればいいのですが。

  • Get-Aclコマンド(PowerShell)

    Get-AclコマンドでCドライブの中にあるフォルダのアクセス権を 表示させようとしていますが、なぜかうまくいきません。 手順としてCドライブのフォルダ確認 PS C:\> dir ディレクトリ: C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- da--- 2011/03/31 15:37 APSETUP d---- 2011/12/30 20:50 Fujitsu d---- 2011/03/31 15:52 Intel d---- 2009/07/14 12:20 PerfLogs d-r-- 2014/09/12 20:15 Program Files d-r-- 2014/09/12 20:15 Program Files (x86) d---- 2014/01/18 15:57 temp d---- 2011/12/30 20:26 Users d---- 2014/04/30 23:39 Windows d---- 2013/10/06 7:17 マイフォト -a--- 2012/08/31 21:40 1024 .rnd $testaclという変数を作り、get-childItemとget-aclの結果を格納する。 PS C:\> $testacl = Get-ChildItem | Get-Acl .Accessプロパティでアクセス権の詳細を表示 PS C:\> $testacl.access しかし、なにも表示されず・・・・・・ なにが悪いのでしょう?? ちなみに、testacl.accessをexport-csvを使ってCSVに出力してみたところ 何もない空のファイルでした。 エラーはなにもでていないのに・・・ どなたかご教授ねがいます。