目的 :プログラムでドキュメントを SharePoint にアップロードする
問題 :
使用しようとすると、
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
エラーは発生しませんが、含まれているオブジェクトを使用しようとするとエラーが発生します。などNew-Object Microsoft.SharePoint.SPSite($url)
。これを修正するには、MOSS がインストールされている実際のサーバーの Web 拡張フォルダーに含まれている "Microsoft.Sharepoint.dll" をダウンロードします。問題は、Sharepoint サイトをホストする 2008 サーバーでこれらのスクリプトを実行することは、大企業では決して「実用的」ではないということです。私の 2 番目のアプローチは、Internet Explorer com オブジェクトを使用して物理的にページに移動し、そこからファイルをアップロードすることでした。テキスト ボックスの ID を取得した後、値を設定できません。Microsoft による「セキュリティ対策」として私の調査が示しているためです。コマンドレットを使用する
get-member
と、この html 要素に「System.String value {get;set;}」というフィールド値があることがわかります。値を設定しようとしても何も起こりません。Web サイトのテキスト ボックス自体には、何も入力できません。代わりに、テキスト ボックスをクリックすると、[アップロードするファイルを選択] ウィンドウが表示されます。アップロードするファイルを送信せずに手動で選択した場合は、ISE に戻って、$uploadText.Value
選択したばかりのファイルをコンソールに吐き出します。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