2016-07-03 10 views
1

私はC、C++、C#、Pythonのバックグラウンドから来ていますので、私はこの考え方をPowershellに適用しています。これは最初から学習していますが、一見一見矛盾しているようですすべてのオブジェクトに対して固定された基底クラス型構造に従わないため、一貫した方法で物事を照会することができます。

次は正常に動作します:これらはまた、動作しない

 $env | get-member

:だから、$ ENVが有効なオブジェクトであるが、これは動作しません

 
    $host | get-member 
    $env:username 

 
    $env.gettype() 
    dir $env 
    dir $env: 

が、 $ host上のこのタイプのクエリはそうしているので、私は$ hostが.net変数だと仮定していますが、$ envはそうではありませんか?

 $host.gettype()

私はENVのことがわかった。また、DIRで動作します(別名取得-ChildItemコマンドレットを)が、このコロンは私が不慣れだと物事が今非常に混乱取得し始めている表記法のさらに別のタイプです。これは文字列形式ではないようですが、これについてはGoogleの投稿を見てきましたか?これは、メンバー選択または辞書キー指定子のように動作します。それがメンバーセレクターまたは辞書キーであれば、それは標準オブジェクトであるため、getメンバーは動作すると期待します。

これは、必要な変数と値を出力しますが、なぜこの構文が使用されるのか分かりません。これはDOS構文ではないので、ここで何が起こっているのでしょうか?

 dir env:

しかし、dir $ envはdir $ envと同じようです:userprofile ????どうして?

$ホストは.netオブジェクトのようですが、$ envやenv:はまったく違ったものです。オブジェクトの種類がどのようなオブジェクト型であるのかは分かりませんし、型を問うこともできません従来の手段によって。最初の考えは、get-childitemがそれと動作するので、それは並べ替えのリストオブジェクトですが、それ以外は完全に失われています。

私は明らかに何かをここに欠いているので、誰かが正しい方向に私を操縦できますか?

+0

あなたは '$ env'変数を持っていないので、 '$ env'と' $ env:something'は2つの異なる無関係なものです。 – PetSerAl

+0

これは変数でない場合、$ envとは何ですか? env:実際にはドライブですが、$ envと$ env:usernameは別のものですが、私はそれが何であるかまだ分かりません。 – DelboyJay

+1

'$ env'は変数ですが、' $ env = '何か'のように何かを割り当てていないので、あなたは持っていません。 '$ env:username'は' Get-Content env:username'に相当します。ここで 'env:username'はPowerShellプロバイダの項目のPowerShellのパスです。 '$ {C:\ Windows \ System.ini}'や '$ function:prompt'といったコンテンツコマンドレットを実装しているプロバイダで動作します。 – PetSerAl

答えて

1

私の2セント: get-psdriveを試してみて、あなたのような何かを得るだろう:

Name   Used (GB)  Free (GB) Provider  Root 
Env         Environment 

だから、バッチ内のドライバーのようなもののようです。

3

Get-Help 'about_Providers' -ShowWindowenv:Environment ProviderドライブWindows PowerShell providersの即ち一つであることを示しています。

BUILT-INプロバイダー:Windows PowerShellは、あなたがデータ 店舗のさまざまな種類にアクセスするために使用できる組み込みの プロバイダーのセットが含まれています。

Provider  Drive   Data store 
--------  -----   ---------- 
Alias   Alias:  Windows PowerShell aliases 
Certificate Cert:   x509 certificates for digital signatures 
Environment Env:   Windows environment variables 
FileSystem *    File system drives, directories, and files 
Function  Function:  Windows PowerShell functions 
Registry  HKLM:, HKCU: Windows registry 
Variable  Variable:  Windows PowerShell variables 
WSMan   WSMan:  WS-Management configuration information 

* The FileSystem drives vary on each system. 

また、独自のWindows PowerShellプロバイダーを作成することができ、あなたは 他の人が開発プロバイダをインストールすることができます。セッションで利用できる のプロバイダーを一覧表示するには、get-psproviderと入力します。 dir $env:に反しでなぜGet-ChildItem env:作品だ

dir $envなどに注意する

3

まず最初は$env$env:usernameは関連はないということです。 $envは単なる変数であり、誰もそれに何も割り当てないので、通常存在しません。変数名にコロンを使用すると($env:usernameなど、いくつかの事前定義プレフィックスを除き、global:,script:local:private:variable:などの特殊な構文は、可変構文のPowerShellプロバイダーアイテムコンテンツにアクセスできる特殊な構文です。コンテンツコマンドレットを実装するPowerShellプロバイダー(${C:\Windows\System.ini}または$function:prompt)で動作します。その構文は、特定のPowerShellパスに対してGet-ContentまたはSet-Contentの呼び出しと同等です。

関連する問題