簡體   English   中英

為什么此Powershell腳本不接受參數?

[英]Why won't this powershell script accept parameters?

myscript.ps1

Param(
    [Parameter(Mandatory=$true,Position=1)]
    [string]$computerName
)

echo "arg0: " $computerName

命令文件

C:\> myscript.ps1 -computerName hey

輸出:

cmdlet myscript.ps1 at command pipeline position 1
    Supply values for the following parameters:
    computerName: ddd
    arg0:
    ddd

我只是試圖在CMD中使用Powershell參數,而且似乎無法獲得一個腳本。 我看到網站說在腳本前加上.\\但這無濟於事。 我添加了強制性行,以查看Powershell是否正在讀取參數,顯然不是。 參數computerName顯然是單詞“ hey”。 Param塊是腳本中的第一件事。 Powershell似乎可以識別參數computerName ,但是無論我如何輸入命令,它都不會認為我實際上是在輸入參數。

我的語法到底有什么問題?

默認情況下,Powershell將不會運行恰好在當前目錄中找到的腳本。 微軟打算將其用作安全功能,並且我相信它可以模仿Unix shell中的行為。

Powershell將運行在搜索路徑中找到的腳本。 您的搜索路徑存儲在$env:path

我懷疑您在搜索路徑上的其他某個目錄中有一個名為“ myscript.ps1”的腳本。

我以前曾經發生過這種情況。 我看到的症狀是參數列表似乎與我定義的列表不同。 每個腳本都有一個不同的參數列表,因此當我向腳本提供用於另一個腳本的參數列表時,該腳本會被炸毀。 我的習慣是不依賴參數位置,因此這個問題很容易找到。

在腳本“。\\ myscript.ps1”中添加“。\\”應強制外殼程序在當前目錄中使用.ps1文件。 作為測試,我將指定要嘗試執行的文件的完整路徑(如果路徑中有空格,請確保將路徑包裝在“引號”中)或將其更改為一些不會被使用的瘋狂名稱與其他文件(例如“ crazyfishpants.ps1”)重復,然后查看外殼程序是否仍找到該文件。

如果您有一個功能(“ Get-Foo”)從與腳本文件(“ Get-Foo.ps1”)同名的模塊或配置文件中加載,則可能會遇到類似的問題。 您可能最終會運行除預期之外的東西。

位置值應從0開始(第一個參數為0)。 也就是說,我無法復制您在PowerShell 2.0或3.0上看到的內容。

謝謝大家的有益答復。 在提交之前,我的問題似乎已經過編輯,因為文本使您相信我是直接在Powershell中輸入此命令的。

我實際上是在CMD中運行腳本的命令,這完全解釋了為什么它沒有將參數傳遞給Powershell腳本。 誰使我的問題開綠燈,誰可能將C:\\>更改為PS>以為我打錯了字。

我以為如果可以直接從CMD運行腳本,則可以在CMD的命令行上向其發送參數,但是顯然並非如此。 如果我現在在Powershell中運行腳本,它確實可以正常運行。

我的最終目標是允許用戶從CMD運行Powershell腳本。 看來我可以制作一個接受參數的批處理文件,然后啟動powershell並將那些參數發送到PS腳本。 因此,在批處理文件中,我應該執行以下操作:

powershell -File C:\myscript.ps -computerName %1

這個謎題可能在此站點上被解決了100多次,對此我深表歉意。 再次感謝您的回復。

暫無
暫無

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

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