我使用我在这里找到的 T-SQL 命令来获取我的数据库表的碎片。当我在 Management Studio 中执行 T-SQL 时,一切正常。如果我在 PowerShell 中使用它,我会收到以下错误(从德语翻译):
使用 0 个参数调用“ExecuteReader”时出现异常:
“'GO' 附近的语法不正确。
'GO' 附近的语法不正确。”
在 Zeile:17 Zeichen:6
+ $Result = $cmd.ExecuteReader()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullQualifiedErrorId : SqlException
这是我的脚本中引发错误的部分
foreach ($table in $tables)
{
$Data = New-Object System.Data.DataTable
$cmd = New-Object System.Data.SqlClient.SqlCommand
$getFragRate = "
-- SQL Command von Microsoft um die Index Fragmentation zu überprüfen
USE Logik;
GO
SELECT a.index_id, name, avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID(N'Logik'), OBJECT_ID(N'$($table)'), NULL, NULL, …Run Code Online (Sandbox Code Playgroud) PowerShell的默认设置是,当您在PowerShell控制台中单击时,PowerShell进入“选择模式”并暂停脚本,直到您敲空格,进入或转义。
我有一个带有无限循环的脚本,该脚本while ($true) {}应始终运行,当有人不小心单击PowerShell窗口时,如何告诉PowerShell不要停止脚本?
我的脚本中有一个奇怪的问题.我正在某些服务器上调用命令.如果我无法连接到服务器(因为它是脱机的或其他东西)我仍然想记录(服务器脱机> log.txt)
显然,当Try块中发生错误时,Catch不执行该块.
为了测试这个,我给ComputerName不存在的参数写了一个值.这是我的代码:
Try {
Invoke-Command -ComputerName hui -ScriptBlock $sb
}
Catch {
Write-Host "Hello"
}
Run Code Online (Sandbox Code Playgroud)
但是脚本从未发出"你好"
我得到的例外是PSRemotingTransportException.我也试着指定异常,也没用
当我在该Invoke-Command行设置断点时,它也会忽略catch块.为什么?
我正在编写一个返回网络中所有在线计算机的函数,因此我可以执行以下操作:
Get-OnlineComputers | % { get-process -computername $_ }
Run Code Online (Sandbox Code Playgroud)
现在我基本上已经准备好了我的功能,但是花费的时间太长了。我只想返回启用 WinRM 的计算机,但我还想提供选项来获取每台计算机,甚至是那些尚未设置 WinRM 的计算机(切换参数)。
这是我的职责。首先,它创建一个到域控制器的会话,以获取 LAN 中的所有计算机。然后对于每台计算机,它将测试它们是否激活了 WinRM 或者是否接受 ping。如果是这样,它就会被退回。
$session = New-PSSession Domaincontroller
$computers = Invoke-Command -Session $session { Get-ADComputer -filter * } | select -ExpandProperty Name
$computers | % {
if ($IncludeNoWinRM.IsPresent)
{
$ErrorActionPreference = "SilentlyContinue"
$ping = Test-NetConnection $_
if ($ping.PingSucceeded -eq 'True')
{
$_
}
}
else
{
$ErrorActionPreference = "SilentlyContinue"
$WinRM = Test-WSMan $_
if ($WinRM)
{
$_
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我检查在线计算机的最佳方式吗?有人有更快更好的想法吗?
谢谢!
我正在监视服务器上的两个进程.当其中一个人去世时,我需要知道它是哪一个.
有没有比我到目前为止检查这个更好的方法?有没有办法做到这一点没有if/elseif我到目前为止?
while ((ps proc1 -ov websrv).Responding -and (ps proc2 -ov connec).Responding)
{ sleep -m 100 }
$pmsname = if (!$websrv.Responding -and !$connec.Responding) { "beide" }
elseif (!$websrv.Responding -and $connec.Responding) { "websrv" }
elseif ($websrv.Responding -and !$connec.Responding) { "connec" }
Run Code Online (Sandbox Code Playgroud)