簡體   English   中英

腳本在ISE中工作,而不是在一些PowerShell CLI中工作

[英]Script works in ISE and not SOME powershell CLI

$wshell = New-Object -ComObject Wscript.Shell
$wshell.Popup("********Please Select the SOURCE Directory********",0,"Directory Selecter 5000",0x1)

Function Get-Folder($initialDirectory)

{

    $foldername = New-Object System.Windows.Forms.FolderBrowserDialog
    $foldername.rootfolder = "MyComputer"

    if($foldername.ShowDialog() -eq "OK")
    {
        $folder += $foldername.SelectedPath
    }
    return $folder
}

$a = Get-Folder

$wshellb = New-Object -ComObject Wscript.Shell
$wshellb.Popup("********Please Select the DESTINATION Directory********",0,"Directory Selecter 5000",0x1)
Function Get-Folder($initialDirectory)

{

    $foldername = New-Object System.Windows.Forms.FolderBrowserDialog
    $foldername.rootfolder = "MyComputer"

    if($foldername.ShowDialog() -eq "OK")
    {
        $folder += $foldername.SelectedPath
    }
    return $folder
}

$b = Get-Folder


Set-Content -Path "C:\script\scripts\script data.txt" -Value "$a" -Force
Set-Content -Path "C:\script\scripts\script data2.txt" -Value "$b" -Force

所以這個腳本在ISE中工作,如果我將它復制/粘貼到CLI中就是這樣。 如果我導航到powershell CLI中的文件夾並從那里運行它會給我這個錯誤:

New-Object:找不到類型[System.Windows.Forms.FolderBrowserDialog]:驗證是否已加載包含此類型的程序集。 在C:\\ script \\ scripts \\ pathingworking.ps1:8 char:19 + $ foldername = New-Object System.Windows.Forms.FolderBrowserDialog + ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidType :( :) [New-Object],PSArgumentException + FullyQualifiedErrorId: TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand

無法在此對象上找到屬性“rootfolder”。 驗證該屬性是否存在且可以設置。 在C:\\ script \\ scripts \\ pathingworking.ps1:9 char:5 + $ foldername.rootfolder =“MyComputer”+ ~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~ + CategoryInfo:InvalidOperation:(:) [],RuntimeException + FullyQualifiedErrorId:PropertyNotFound

您無法在空值表達式上調用方法。 在C:\\ script \\ scripts \\ pathingworking.ps1:11 char:8 + if($ foldername.ShowDialog()-eq“OK”)+ ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ + CategoryInfo:InvalidOperation:(:) [],RuntimeException + FullyQualifiedErrorId:InvokeMethodOnNull

對於應該彈出的文件夾選擇窗口的每個實例,此錯誤返回兩次。

我已經嘗試過-STA來自運行對話,快捷方式,甚至來自CLI,它總是給我這個錯誤。 我已經使用[System.Threading.Thread] :: CurrentThread.GetApartmentState()驗證了powershell的開放實例是STA。 我可以打開一個PowerShell CLI並導航到腳本所在的文件夾,調用腳本,它會給我錯誤,然后我可以復制\\粘貼它在同一個完全相同的CLI中,它可以正常工作。 我也在資源管理器中右鍵單擊該文件並選擇“使用powershell運行”,它也給了我錯誤。 我已經提升了CLI,看看是否有幫助沒有成功。

我擔心這是一個小小的疏忽,希望有人能幫助我。

使用v1.0 windows 10

找不到類型[System.Windows.Forms.FolderBrowserDialog]是由於程序集未加載。

加載程序集

Add-Type -AssemblyName "System.Windows.Forms"

重新運行的答案解決了錯誤,但沒有做很多解釋。 在ISE中設計腳本(這是我幾乎專門做的)很方便,因為它會自動為您加載類型和模塊。 如果您打算從另一個CLI(命令行解釋器)運行腳本,那么您應該習慣在腳本的早期顯式加載所需的模塊和程序集,以便稍后調用這些內容時,PowerShell會知道您的內容是什么要求。

不幸的是,當涉及哪些類型本身可用時,沒有簡單的方法可以告訴你需要做什么,但是一點點試錯通常會很快指出它,或者如果你看看你的腳本並看到您正在使用System.Kitchen.Pasta創建一個新對象,那么您可能需要首先加載System.Kitchen的程序集,以便它在您需要時可以使用Pasta類型,因此您可以只包含一個加載調用腳本頂部附近的那個程序集沒有造成任何傷害。

在您的特定情況下,如已經指出的那樣,您將需要加載包含要顯示的FolderBrowserDialog框的程序集。 將以下內容添加為腳本的第一行將解決您看到的錯誤:

Add-Type -AssemblyName "System.Windows.Forms"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM