有没有办法在不丢失任何音符属性的情况下修改字符串?
$t = 'something'|Add-Member noteproperty one 1 -PassThru
$t.one
1
$t = 'else'
$t.one
<nothing here>
$t.value = 'else' # The property 'value' cannot be found on this object
Run Code Online (Sandbox Code Playgroud) 我正在寻找运行作业时与 PowerShell 管道重定向 *>&1 等效的内容。
我大致这样运行作业:
$Instance = [PowerShell]::Create()
$Instance.AddScript($CommandList)
$Result = $Instance.BeginInvoke()
$Instance.EndInvoke($Result)
Run Code Online (Sandbox Code Playgroud)
问题是输出被分成多个流,要报告它我必须这样做:
$Instance.Streams.Debug
$Instance.Streams.Error
$Instance.Streams.Information
Run Code Online (Sandbox Code Playgroud)
这会按类型对消息进行分组,而不是将它们交错排列,因此没有好的方法可以判断在执行过程中的何处抛出了给定的错误。如果将它们组合起来,错误将立即出现在相关的 Write-Host 语句之后。
似乎有 5 个流(调试、错误、信息、进度、详细和警告),我想将它们全部组合起来,尽管简单地组合错误和信息将是向前迈出的一大步。
我环视了 $Instance 对象,并试图在 InitialSessionState 下找到一些东西来传递给 Create() ,但没有任何明显的表现。
这本质上是一个间隙和岛屿问题,但它是非典型的。我确实将示例缩减到最低限度。我需要识别超过特定阈值的间隙,并且重复不会成为问题,尽管此示例删除了它们。
在任何情况下,使用 ROW_NUMBER() 的常见解决方案都没有帮助,因为即使是 1 的间隙也无法处理,并且间隙值是“现实生活”中的参数。
下面的代码实际上可以正确运行。而且速度超级快!但如果你看看它,你就会明白为什么人们对依赖它相当害羞。该方法首次发布于 9 年前,http ://www.sqlservercentral.com/articles/T-SQL/68467/,我已经阅读了全部 32 页的评论。除了说“这不是有记录的行为”之外,没有人成功地找出其中的漏洞。我在 2005 年到 2019 年的每个版本上都尝试过,效果很好。
问题是,除了使用游标或 while 循环逐一查看数百万行之外,这需要多长时间,因为我在 30 分钟后取消了。- 是否有一种“受支持”的方法可以在合理的时间内获得相同的结果?即使慢 100 倍也会在 10 分钟内完成 4M 行,但我找不到接近这个目标的方法!
CREATE TABLE #t (CreateDate date not null
,TufpID int not null
,Cnt int not null
,FuzzyGroup int null);
ALTER TABLE #t ADD CONSTRAINT PK_temp PRIMARY KEY CLUSTERED (CreateDate,TufpID);
-- Takes 40 seconds to write 4.4M rows from a source of 70M rows.
INSERT INTO #T
SELECT X.CreateDate
,X.TufpID
,Cnt = COUNT(*) …Run Code Online (Sandbox Code Playgroud)