2017-05-08 39 views
0

我想在我的PowerShell腳本中調用telnet.vbs如何在文件中的選定位置放置/替換一個單詞?

該腳本應該在foreach循環的每次迭代中重新啓動主機$line

telnet.vbs腳本:

Option explicit 
    Dim oShell 
    set oShell= Wscript.CreateObject("WScript.Shell")" 
    oShell.Run "telnet" 
    WScript.Sleep 3000 
    oShell.Sendkeys "open $line~" 
    WScript.Sleep 5000 
    oShell.Sendkeys "y~" 
    WScript.Sleep 5000 
    oShell.Sendkeys "fusion~" 
    WScript.Sleep 4000 
    oShell.Sendkeys "tnniw~" 
    WScript.Sleep 4000 
    oShell.Sendkeys "shutdown -r -t 0~" 
    Wscript.Quit} 

我想運行在環路和內部telnet.vbs這個腳本,$line應在每一次迭代來代替:

foreach($line in $servers) 
{ 
    & .\telnet.vbs 
} 

我嘗試這樣做:

(Get-Content .\telnet.vbs).Replace("(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([0-9]|[1-2][0-9]|3[0-2]))","$line") | Set-Content .\telnet.vbs 

但它什麼都不做。當然,語法是錯誤的。

+1

如何將服務器名稱傳遞給VBScript [作爲參數](http://stackoverflow.com/a/2806731)? – vonPryz

+0

我不知道如何在PowerShell中執行此操作。 – TraPS

回答

0

將服務器名稱作爲參數傳遞給VBScript文件。像這樣,

# Powershell 
$servers = get-content c:\my\servers\list.txt 
foreach($s in $servers) 
{ 
    # Call the VBScript and pass each server as argument 
    & c:\my\scripts\telnet.vbs $s 
} 

' VBScript 
Option explicit 
Dim oShell 
set oShell= Wscript.CreateObject("WScript.Shell")" 

' Build the open command string by catenating "open", 
' server name from script arguments and "<enter>" together 
dim openCmd 
set openCmd = "open " & WScript.Arguments(0) & "~" 

oShell.Run "telnet" 
WScript.Sleep 3000 
oShell.Sendkeys openCmd 
WScript.Sleep 5000 
oShell.Sendkeys "y~" 
WScript.Sleep 5000 
oShell.Sendkeys "fusion~" 
WScript.Sleep 4000 
oShell.Sendkeys "tnniw~" 
WScript.Sleep 4000 
oShell.Sendkeys "shutdown -r -t 0~" 
Wscript.Quit 
相關問題