Tôi cảm thấy như tôi đang thiếu một cái gì đó mà nên được rõ ràng, nhưng tôi chỉ không thể tìm ra cách để làm điều này.Làm cách nào để đưa chức năng được xác định cục bộ khi sử dụng Lệnh gọi của PowerShell để truy cập từ xa?
Tôi có tập lệnh ps1 có chức năng được xác định trong đó. Nó gọi hàm này và sau đó thử sử dụng nó từ xa:
function foo
{
Param([string]$x)
Write-Output $x
}
foo "Hi!"
Invoke-Command -ScriptBlock { foo "Bye!" } -ComputerName someserver.example.com -Credential [email protected]
Tập lệnh mẫu ngắn này in "Xin chào!" và sau đó đổ vỡ cho biết "Thuật ngữ 'foo' không được nhận dạng là tên của lệnh ghép ngắn, hàm, tệp kịch bản hoặc chương trình có thể hoạt động."
Tôi hiểu rằng chức năng không được xác định trên máy chủ từ xa vì nó không có trong ScriptBlock. Tôi có thể xác định lại nó ở đó, nhưng tôi không muốn. Tôi muốn xác định chức năng một lần và sử dụng nó một cách cục bộ hoặc từ xa. Có cách nào tốt để làm điều này?
Được rồi, âm thanh đó tương tự với nội dung tôi đã đọc. Vì vậy, lấy một bước xa hơn: có cách nào tốt để bao gồm hàm và một số dòng lệnh bổ sung sử dụng hàm này không? –
Tôi chưa thử nghiệm điều này, nhưng nếu bạn muốn định dạng đầu ra của hàm (ví dụ), điều này sẽ hoạt động: '-ScriptBlock {$ function: foo | format-table -auto}'. Về cơ bản, bất kỳ 'ScriptBlock' nào cũng có thể là bất kỳ" đoạn mã "nào của mã PowerShell hợp lệ, miễn là bạn định dạng nó đúng (hoặc sử dụng dấu chấm phẩy ở cuối mỗi" dòng "), bạn nên làm tốt. Trước đó hôm nay tôi đã mucking xung quanh với 'measure-command {$ x = [xml] (get-content file.xml); ví dụ $ x.selectsinglenode (" // thing ");}. – alroc