0

目的 :プログラムでドキュメントを SharePoint にアップロードする

問題 :

  1. 使用しようとすると、[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")エラーは発生しませんが、含まれているオブジェクトを使用しようとするとエラーが発生します。などNew-Object Microsoft.SharePoint.SPSite($url)。これを修正するには、MOSS がインストールされている実際のサーバーの Web 拡張フォルダーに含まれている "Microsoft.Sharepoint.dll" をダウンロードします。問題は、Sharepoint サイトをホストする 2008 サーバーでこれらのスクリプトを実行することは、大企業では決して「実用的」ではないということです。

  2. 私の 2 番目のアプローチは、Internet Explorer com オブジェクトを使用して物理的にページに移動し、そこからファイルをアップロードすることでした。テキスト ボックスの ID を取得した後、値を設定できません。Microsoft による「セキュリティ対策」として私の調査が示しているためです。コマンドレットを使用するget-memberと、この html 要素に「System.String value {get;set;}」というフィールド値があることがわかります。値を設定しようとしても何も起こりません。Web サイトのテキスト ボックス自体には、何も入力できません。代わりに、テキスト ボックスをクリックすると、[アップロードするファイルを選択] ウィンドウが表示されます。アップロードするファイルを送信せずに手動で選択した場合は、ISE に戻って、$uploadText.Value選択したばかりのファイルをコンソールに吐き出します。

  3. 3 つ目の努力は、VB にある sendkeys オブジェクトを使用してパスを Web ブラウザーに送信し、その方法でファイルをアップロードすることでした。しかし、それを実行すると、プログラムはハングアップし、送信されません。http://technet.microsoft.com/en-us/library/ff731008で見つけたこの戦略は、「少し…気まぐれ…」と説明されていました。最初に、$ie オブジェクトで Microsoft ファイル ブラウザーを開いてから、それにキーを送信しようとします。

試行されたコード: (IE com オブジェクト、AppActivate および Sendkeys を使用):

$spURL = "https://SharepointSite"
[void] [System.Reflection.Assembly]::LoadWithPartialName("'Microsoft.VisualBasic")
$ie = new-object -com "InternetExplorer.Application"
$ie.visible = $true
$ie.navigate2($spURL)
while($ie.Busy -eq $true) {Start-Sleep 1}
($ie.Document.GetElementByID("zz16_UploadMenu")).click()
while($ie.Busy -eq $true) {Start-Sleep 1}
$uploadText = $ie.Document.GetElementByID("ctl00_PlaceHolderMain_ctl01_ctl02_InputFile")
[Microsoft.VisualBasic.Interaction]::AppActivate("Upload Document")
$uploadText.value = "C:\uploadFile.xlsx" #this line does nothing
$uploadText.click() ## opens up "choose file to upload"
[void] [System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")
[System.Windows.Forms.SendKeys]::SendWait("C:\uploadFile.xlsx")

それだけです。ブラウザ ボックスがポップアップ表示され、スクリプトは終了しません。AppActivate を「アップロードするファイルを選択」に設定することに問題を抱えている人がいることがわかりました (IE のタイトルを「ドキュメントのアップロード」に変更する前に設定していました)。これらの問題はすべて VB にありましたが、誰かが「Microsoft HTML ライブラリの参照」の修正であると主張しているものを見つけましたが、それは VB でのみ機能し、powershell でこれが必要です。その修正はここにありますが、私にはうまくいきません。

Microsoft は、私がプログラムでファイルをアップロードすることを望んでいないようです。しかし、これを「不可能」と考える前に、まずここに投稿したいと思いました。どんな助けでも大歓迎です.powershellですべてが可能だと思いました! :D

4

1 に答える 1

0

セキュリティ上の理由により、Comobject IE でファイルのアップロードを行うことはできません

PS内でwatin dllを使用してその問題を解決しました。

ここからサンプルにアクセスすることはできませんが、必要なものはすべて www.watin.org で見つかります

于 2012-08-22T16:38:04.123 に答える