1

以下のコードに問題があります。現在のユーザーだけでなく、すべてのユーザー プロファイルに対して出力を機能させる方法を見つけようとしています。$shell.NameSpace(34) を使用すると、コードが機能します (2 行がコメント化されています)。しかし、shell.namespace をオーバーライドして手動でパスを追加しようとすると、メソッド項目が存在しないというエラーが表示されます。この問題を修正または回避する最善の方法は何か疑問に思っています。

実際のエラー メッセージ: [System.String] に 'Items' という名前のメソッドが含まれていないため、メソッドの呼び出しに失敗しました。

高度なヘルプをありがとう。

$shell = New-Object -ComObject Shell.Application
$colProfiles = Get-ChildItem "C:\Users\" -Name
#$hist = $shell.NameSpace(34)
#Write-Host $hist

foreach ( $userProfile in $colProfiles )
{
    [string]$hist = "C:\Users\$userProfile\AppData\Local\Microsoft\Windows\History"
    $date = ""
    $url = ""

    $hist.Items() | foreach {
        ""; ""; 
        if ($_.IsFolder) 
        {
            $siteFolder = $_.GetFolder
            $siteFolder.Items() | foreach {
                $site = $_
                ""; 
                if ($site.IsFolder) 
                {
                    $pageFolder  = $site.GetFolder
                    Write-Host $pageFolder
                    $pageFolder.Items() | foreach {
                        $url  = $pageFolder.GetDetailsOf($_,0)
                        $date = $pageFolder.GetDetailsOf($_,2)
                        echo "$date $url"
                    }
                }
            }
        }
    }
}
4

2 に答える 2

2

文字列をフォルダオブジェクトとして扱っています。

変化する:

[string]$hist = "C:\Users\$userProfile\AppData\Local\Microsoft\Windows\History"

に:

$hist = Get-Item "C:\Users\$userProfile\AppData\Local\Microsoft\Windows\History"

これにより、フォルダオブジェクトが取得され、必要に応じて操作できるようになります。

于 2012-06-05T18:53:03.603 に答える
2

ドキュメントによると、パス文字列から名前空間オブジェクトを作成できます。

http://msdn.microsoft.com/en-us/library/windows/desktop/bb774085(v=vs.85).aspx

だからあなたはこれを行うことができます:

$shell = New-Object -ComObject Shell.Application
$colProfiles = Get-ChildItem "C:\Users\" -Name

foreach ( $userProfile in $colProfiles )
{
   [string] $histPath = "C:\Users\$userProfile\AppData\Local\Microsoft\Windows\History"
   $hist = $shell.NameSpace($histPath)

    $date = ""
    $url = ""

    $hist.Items() | foreach {
        ""; ""; 
        if ($_.IsFolder) 
        {
            $siteFolder = $_.GetFolder
            $siteFolder.Items() | foreach {
                $site = $_
                ""; 
                if ($site.IsFolder) 
                {
                    $pageFolder  = $site.GetFolder
                    Write-Host $pageFolder
                    $pageFolder.Items() | foreach {
                        $url  = $pageFolder.GetDetailsOf($_,0)
                        $date = $pageFolder.GetDetailsOf($_,2)
                        echo "$date $url"
                    }
                }
            }
        }
    }
}
于 2012-06-05T19:02:34.200 に答える