Ok, hãy lấy từ đầu rồi.
$computers = gc "C:\scripts\computers.txt"
Điều đó tải nội dung của tệp "computers.txt" vào biến $computers
. Đủ đơn giản, không có vấn đề ở đó.
Tiếp theo chúng tôi có vòng lặp ForEach. Nó chia nhỏ nội dung của $computers
và xử lý mỗi dòng (có lẽ là tên của máy tính) là $computer
đối với tất cả mã trong dấu ngoặc nhọn.
foreach ($computer in $computers) {
Vòng lặp đó bắt đầu với câu lệnh If-Then chuẩn. Nếu (condition)
thì {do stuff}
. Trong trường hợp này, nó đang kiểm tra xem liệu $computer
có khả dụng trên mạng hay không. Nếu có, thì nó cố gắng chạy PSExec trên đó. Nếu nó không trực tuyến, nó chạy mệnh đề Else, chúng ta sẽ nhận được điều đó trong một giây.
if (test-Connection -Cn $computer -quiet) {
Sau đó, thư sẽ thay đổi thư mục. Loại vô nghĩa, nhưng ok, bất cứ điều gì. Bạn có thể chỉ cần gọi nó một cách rõ ràng, chẳng hạn như C:\PSTools\PSExec.exe <arguments>
và lưu một dòng, nhưng thực sự không có hại gì được thực hiện.
cd C:\pstools
Sau đó, bạn đang gọi PSExec, mặc dù có một lỗi cú pháp nhỏ ở đây. Nó phải là $computer
và không phải là %computer
. Ngoài ra, nó chỉ cần có lệnh bạn muốn thực thi, không phải là cmd
và lệnh trên dòng thứ hai. Bạn có thể có kết quả tốt hơn nếu bạn sử dụng toán tử Gọi (&
) để làm cho PowerShell nhận ra rằng nó đang cố gắng thực thi một cái gì đó và không chạy lệnh ghép ngắn hoặc chức năng hay không.
& psexec \\$computer C:\Folder\install.bat
Sau đó là mệnh đề khác cho biết nếu máy tính không trực tuyến để viết chuỗi "$ máy tính không trực tuyến", sau đó đóng dấu ngoặc cho mệnh đề Khác và vòng lặp ForEach.
} else {
"$computer is not online"
}
}
Edit: Ok, kịch bản đã hoàn thành của bạn sẽ giống như thế này (kèm theo mục tiêu trong dấu ngoặc kép trong trường hợp có nhiều không gian trong đường dẫn):
$computers = gc "C:\scripts\computers.txt"
foreach ($computer in $computers) {
if (test-Connection -Cn $computer -quiet) {
& C:\pstools\psexec.exe \\$computer "C:\folder\install.bat"
} else {
"$computer is not online"
}
}
Tập lệnh thực tế đã được sao chép và dán chưa? Hoặc chỉ cần gõ lại, có thể với một số lỗi chính tả? – TheMadTechnician
Tôi đã sao chép/dán nó. Tôi rất mới làm quen với kịch bản trong Powershell, xin lỗi nếu cú pháp là không may. – noz3r0
cố gắng không sử dụng psexec với powershell, tôi có rất nhiều vấn đề về điều này ... –