web-dev-qa-db-ja.com

cert:\ CurrentUser \ MyへのPowerShellアクセスが拒否されました

PS cert:\currentuser\my> dir  
Get-ChildItem : Access is denied.
At line:1 char:3
+ dir <<<<

PowerShellスクリプトに署名するためのコード署名証明書にアクセスできません。 MMC、証明書を開いて、コード署名証明書が自分のマシンにインストールされ、有効であることを確認できます(Windows XP SP 3)。

もう1つの奇妙な点は、PowerShellからマップされたネットワークドライブにアクセスできないことですが、WindowsエクスプローラーとDOSウィンドウでは問題なく表示されます。

PowerShellをアンインストールし、再起動して、PowerShell 1を再インストールしましたが、それでも同じ問題が発生します。

編集:このマシンの私の日常のアカウントは管理者ではありませんが、それを必要とするタスクに使用できる管理者アカウントを持っています。コード署名証明書は私の日常のアカウントに割り当てられており、コードに署名するために管理者である必要はありません。このアカウントに証明書ストアへの権限を付与する方法がわかりません。

編集2:FileMon および RegMon を実行して、アクセスが拒否されているものを確認しました。 cert:CurrentUser\MyはフォルダC:\Documents and Settings\USERNAME\Application Data\Microsoft\SystemCertificates\My\Certificatesです。また、C:\Documents and Settings\USERNAME\Local Settings\Tempへのアクセスも拒否されました。 Explorerを開いて、これらのフォルダー内のファイルに問題なくアクセスできます。これらのフォルダーに対する完全な権限を一時的にEveryoneに付与しましたが、PowerShellからアクセス拒否メッセージを受信しました。

グーグルはあまり明らかにしていない。私は何をすべきか?

Windows PowerShellイベントログからのメッセージ:

Provider Health: Attempting to perform the GetChildItems operation on  
the 'Certificate' provider failed for path '\currentuser\my'. Access is denied.

Details: 
ProviderName=Certificate
ExceptionClass=ProviderInvocationException
ErrorCategory=InvalidOperation
ErrorId=GetChildrenProviderException
ErrorMessage=Attempting to perform the GetChildItems operation on  
       the 'Certificate' provider failed for path '\currentuser\my'.  
       Access is denied.

Severity=Warning
SequenceNumber=146

HostName=ConsoleHost
HostVersion=1.0.0.0
     .....  
3
Bratch

権限に問題があるようです。

これはこのPCの管理者アカウントですか、ドメインコントロールの対象ですか、グループポリシーは有効になっていますか?

このPCはPowerShellが望む以上にロックダウンされていると思います。一部の管理者は、何らかの損害を与える可能性があるため、実行をまったく許可しません。

Set-ExecutionPolicy RemoteSignedを実行すると、エラーが発生しますか?

4
JNK

PowerShellは.NETFrameworkを介して実行されます。 XPをしばらく使用していませんが、正しく覚えていれば、ユーザーリストに奇妙な.Netユーザーが含まれています。それが何のためにあるのか理解できませんでしたが、問題のディレクトリに対するNTFS権限をそのユーザーに与える必要があるかもしれません。

2
paradroid

なぜこれが起こっているのかを発見しました。メニューからPowerShellを実行するだけでは、証明書やその他のリソースへのアクセスに問題があります。たとえば、それを実行してホームディレクトリに移動し、「dir」を実行すると、次のようになります。

PS C:\Documents and Settings\username> dir
Get-ChildItem : Access to the path 'C:\Documents and Settings\username' is denied.
At line:1 char:3
+ dir <<<<
PS C:\Documents and Settings\username>

それでも、WindowsエクスプローラーまたはDOSウィンドウを使用して、コンテンツを正常に一覧表示できます。

PowerShellを右クリックして[名前を付けて実行]を選択し、現在のユーザーのままにして、[コンピューターとデータを不正なプログラムアクティビティから保護する]チェックボックスをオフにすると機能します。この後、ホームディレクトリを一覧表示し、コードに署名するために必要な証明書にアクセスできます。

DEP設定がグレー表示されています。これは、グループポリシーによってプッシュされているか、管理者に昇格して変更する必要があることを意味します。管理者としてログインしたところ、DEPは重要なWindowsプログラムとサービスに対してのみオンになっていることがわかりました。 PowerShellはこのカテゴリに分類されると思います。証明書にアクセスできるようになったので、秘密鍵が見つからないことがわかりました。これは、証明書を再発行することで修正できると思います。

1
Bratch

PowerShellでSet-ExecutionPolicy Unrestrictedを実行してみてください

0
jsaddwater