我正在编写一个PowerShell脚本,它将使用Invoke-Command及其-ScriptBlock
参数在远程主机上执行命令.例如,
function Foo {
...
return "foo"
}
$rv = Invoke-Command --Credential $c --ComputerName $fqdn -ScriptBlock ${function:Foo}
Run Code Online (Sandbox Code Playgroud)
这很好用.我现在要做的是同样的事情,但用本地参数调用函数.例如,
function Bar {
param( [String] $a, [Int] $b )
...
return "foo"
}
[String] $x = "abc"
[Int] $y = 123
$rv = Invoke-Command --Credential $c --ComputerName $fqdn -ScriptBlock ${function:Foo($x,$y)}
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
Invoke-Command:无法验证参数'ScriptBlock'的参数.参数为null.提供非null参数并再次尝试该命令.
如何使用-ScriptBlock
带有参数的本地函数的Invoke-Command ?
我意识到我可以将整个函数和参数包装在一个大的代码块中,但在我看来,这并不是一种干净的方式.
我想在MATLAB中反转图像的傅立叶变换,但结果不是原始图像(应该是).显然有一些我不知道的实现细节导致了这个问题.这是代码:
img = imread('img.jpg');
fft = fft2(img);
inv = ifft2(fft);
imshow(inv);
Run Code Online (Sandbox Code Playgroud) 我正在寻找以下差异的解释:
给出以下powershell脚本foo.ps1:
write-host "normal"
write-error "error"
write-host "yay"
Run Code Online (Sandbox Code Playgroud)
运行它
C:\>powershell .\foo.ps1 > out.txt 2>&1
生产:
normal
C:\foo.ps1 : error
At line:1 char:10
+ .\foo.ps1 <<<<
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,foo.ps1
Write-Host : The OS handle's position is not what FileStream expected. Do not use a handle simultaneously in one FileStream and in Win32 co
de or another FileStream. This may cause data loss.
At C:\foo.ps1:3 char:11
+ write-host <<<< "yay"
+ CategoryInfo …
Run Code Online (Sandbox Code Playgroud) 是否可以检查给定的正则表达式是否匹配任何字符串?具体来说,我正在寻找一个matchesEverything($regex)
返回true 的函数iff $regex
将匹配任何字符串.
我想这相当于问,"给定正则表达式r
,是否存在不匹配的字符串r
?" 如果不在"所有字符串"的集合上放置边界,我认为这是不可解决的.即,如果我认为字符串永远不会包含"blahblah",那么我可以简单地检查是否r
匹配"blahblah".但是,如果没有这样的界限怎么办?我想知道这个问题是否可以解决,检查正则表达式r
是否相当于.*
.
我正在寻找一个The OS handle's position is not what FileStream expected. Do not use a handle simultaneously in one FileStream and in Win32 code or another FileStream.
异常的解决方案,该解决方案也适用于包含"修复"的脚本中调用的脚本.
出于这个问题的目的,假设我有两个脚本:
foo.ps1
# <fix>
$bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetField"
$objectRef = $host.GetType().GetField( "externalHostRef", $bindingFlags ).GetValue( $host )
$bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetProperty"
$consoleHost = $objectRef.GetType().GetProperty( "Value", $bindingFlags ).GetValue( $objectRef, @() )
[void] $consoleHost.GetType().GetProperty( "IsStandardOutputRedirected", $bindingFlags ).GetValue( $consoleHost, @() )
$bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetField"
$field = $consoleHost.GetType().GetField( "standardOutputWriter", $bindingFlags )
$field.SetValue( $consoleHost, [Console]::Out ) …
Run Code Online (Sandbox Code Playgroud) 如何确认主机是否具有NUMA感知功能?在甲骨文的文档说,NUMA意识开始于内核2.6.19,但NUMA手册页说,它与2.6.14介绍.我想确保Java进程开始-XX:+UseNUMA
实际上正在利用某些东西.
检查numa_maps,我看到我有它们:
# find /proc -name numa_maps
/proc/1/task/1/numa_maps
/proc/1/numa_maps
/proc/2/task/2/numa_maps
/proc/2/numa_maps
/proc/3/task/3/numa_maps
Run Code Online (Sandbox Code Playgroud)
虽然我的内核落后于Oracle所说的内容:
# uname -sr
Linux 2.6.18-92.el5
Run Code Online (Sandbox Code Playgroud)
我目前在RHEL5.1上使用64位jdk1.6.0_29.
我想知道使用Perl DBI从Oracle数据库中提取任意大数据字段的最节省内存的方法.我知道使用的方法是将数据库句柄上的"LongReadLen"属性设置为足够大的值.但是,我的应用程序需要提取数千条记录,因此这样做是非常低效的内存效率.
该文档建议事先进行查询以找到最大的潜在价值,然后进行设置.
$dbh->{LongReadLen} = $dbh->selectrow_array(qq{
SELECT MAX(OCTET_LENGTH(long_column_name))
FROM table WHERE ...
});
$sth = $dbh->prepare(qq{
SELECT long_column_name, ... FROM table WHERE ...
});
Run Code Online (Sandbox Code Playgroud)
然而,这仍然是低效的,因为外围数据不代表每个记录.最大值超过MB,但平均记录小于KB.我希望能够在尽可能少浪费未使用的缓冲区的同时提取所有信息(即,不截断).
我考虑过的一种方法是以块的形式提取数据,一次说50条记录,并将LongReadLen设置为该块的最大记录长度.另一个可以但不必依赖于块构思的工作是分叉子进程,检索数据,然后杀死子进程(利用它浪费内存).最棒的是强制释放DBI缓冲区的能力,但我认为这不可行.
有没有人解决类似问题取得任何成功?谢谢您的帮助!
编辑
Perl v5.8.8,DBI v1.52
澄清一下:内存效率低下来自于在准备中使用'LongReadLen'和{ora_pers_lob => 1}.使用此代码:
my $sql = "select myclob from my table where id = 68683";
my $dbh = DBI->connect( "dbi:Oracle:$db", $user, $pass ) or croak $DBI::errstr;
print "before";
readline( *STDIN );
$dbh->{'LongReadLen'} = 2 * 1024 * 1024;
my $sth = $dbh->prepare( $sql, {'ora_pers_lob' => 1} ) …
Run Code Online (Sandbox Code Playgroud) 我写了一个简单的shell脚本来查找大文件,主要是为了节省一些打字.这项工作正在完成:
find $dir -type f -size +"$size"M -printf '%s %p\n' | sort -rn
Run Code Online (Sandbox Code Playgroud)
我想将字节输出转换为人类可读的格式.我在网上找到了如何手动执行此操作的方法,例如,
find $dir -type f -size +"$size"M -printf '%s %p\n' | sort -rn |
awk '{ hum[1024**4]="TB"; hum[1024**3]="GB"; hum[1024**2]="MB"; hum[1024]="KB"; hum[0]="B";
for (x=1024**4; x>=1024; x/=1024){
if ($1>=x) { printf "%7.2f %s\t%s\n",$1/x,hum[x],$2;break }
}}'
Run Code Online (Sandbox Code Playgroud)
但这看起来很混乱.我想知道:是否有一种将字节转换为人类可读形式的标准方法?
当然,在目录和min-size作为输入的情况下,任何产生以下输出的替代方法也是受欢迎的:
1.25 GB /foo/barf
598.80 MB /foo/bar/bazf
500.58 MB /bar/bazf
421.70 MB /bar/baz/bamf
...
Run Code Online (Sandbox Code Playgroud)
注意:这必须适用于2.4和2.6,并且应该对输出进行排序.