如何解决Powershell 循环,带有 sqlplus 连接字符串
我想创建一个 power shell 脚本,它使用 sqlplus 循环连接字符串,但我不确定如何在 power shell 中执行此操作。
类似:
begin
for i in 1..10
loop
sqlplus .../...@'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=...)(HOST=...)(PORT=...)))(CONNECT_DATA=(SID=...)))
--- wait for response then move foreward
end loop;
end
这个想法是我想测试连接字符串中不同的 connection_timeout 值,以确定哪个值更稳定。
我在网上找到了这段 powershell 代码,但我不知道如何根据我的要求调整它:
$lines = Get-Content 'c:\firstsecondnames.txt'
$DBs = "192.168.1.1"
$DB = "DBA"
$ConnectionTimeout = 90
$QueryTimeout = 90
foreach ($line in $lines) {
$vala = $line.Split(',')[0]
$valb = $line.Split(',')[1]
#DB query
$Query = "select ValC from dbo.PROCESSED_INTERCHANGES where Firstname = '$vala' and middlename = '$valb'"
$conn=new-object System.Data.sqlClient.sqlConnection
$ConnectionString = "Server={0};Database={1};Integrated Security=True;Connect Timeout={2}" -f $DBs,$DB,$ConnectionTimeout
$conn.ConnectionString=$ConnectionString
$conn.open()
$cmd=new-object system.Data.sqlClient.sqlCommand($Query,$conn)
$cmd.CommandTimeout=$QueryTimeout
$ds=New-Object system.Data.DataSet
$da=New-Object system.Data.sqlClient.sqlDataAdapter($cmd)
[void]$da.fill($ds)
$conn.Close()
$conn.dispose()
foreach ($valC in $ds.tables[0].rows.ValC) {
$fullname = $vala + $valb + $valC
Write-Host $fullname
}
}
解决方法
如果您只想测试各种 connection_timeout 值,您应该遍历这些值,而不是遍历一组用户名和中间名。
像这样:
$DBs = "192.168.1.1"
$DB = "DBA"
# insert working values here. We don't test these,we only try out different ConnectionTimeouts
$vala = 'FirstName'
$valb = 'MiddleName'
$QueryTimeout = 90
# try a range of connection timeout values. For demo here 10,20 .. 200 + 0
$ConnectionTimeout = for ($i = 10; $i -le 200; $i += 10) { $i }
# lastly,add 'Infinite' value 0
$ConnectionTimeout += 0
$ConnectionTimeout | ForEach-Object {
# show what timeout value is now in effect
Write-Host $(switch ($_){
0 { "Attempting Infinite timeout $_" ; break}
30 { "Attempting Default timeout $_" ; break }
default { "Attempting timeout $_" }
}) -ForegroundColor Cyan
#DB query
$Query = "select ValC from dbo.PROCESSED_INTERCHANGES where Firstname = '$vala' and middlename = '$valb'"
$conn = New-Object System.Data.SqlClient.SQLConnection
$ConnectionString = "Server={0};Database={1};Integrated Security=True;Connect Timeout={2}" -f $DBs,$DB,$_
$conn.ConnectionString = $ConnectionString
$conn.Open()
$cmd = New-Object system.Data.SqlClient.SqlCommand($Query,$conn)
$cmd.CommandTimeout = $QueryTimeout
$ds = New-Object system.Data.DataSet
$da = New-Object system.Data.SqlClient.SqlDataAdapter($cmd)
[void]$da.fill($ds)
foreach ($valC in $ds.tables[0].rows.ValC) {
$fullname = $vala + $valb + $valC
Write-Host $fullname
}
# clean-up
$conn.Close()
$conn.Dispose()
$ds.Dispose()
$da.Dispose()
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。