小编Chr*_*lan的帖子

在带参数的函数上使用Invoke-Command -ScriptBlock

我正在编写一个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 ?

我意识到我可以将整个函数和参数包装在一个大的代码块中,但在我看来,这并不是一种干净的方式.

powershell powershell-2.0

28
推荐指数
2
解决办法
6万
查看次数

为什么这个逆傅里叶变换不能给出正确的结果呢?

我想在MATLAB中反转图像的傅立叶变换,但结果不是原始图像(应该是).显然有一些我不知道的实现细节导致了这个问题.这是代码:

img = imread('img.jpg');
fft = fft2(img);
inv = ifft2(fft);
imshow(inv);
Run Code Online (Sandbox Code Playgroud)

matlab fft image-processing

12
推荐指数
1
解决办法
1万
查看次数

powershell 2.0命令行重定向

我正在寻找以下差异的解释:

给出以下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)

windows powershell file-io command-line powershell-2.0

9
推荐指数
1
解决办法
1642
查看次数

检查给定的正则表达式是否匹配任何内容

是否可以检查给定的正则表达式是否匹配任何字符串?具体来说,我正在寻找一个matchesEverything($regex)返回true 的函数iff $regex将匹配任何字符串.

我想这相当于问,"给定正则表达式r,是否存在不匹配的字符串r?" 如果不在"所有字符串"的集合上放置边界,我认为这是不可解决的.即,如果我认为字符串永远不会包含"blahblah",那么我可以简单地检查是否r匹配"blahblah".但是,如果没有这样的界限怎么办?我想知道这个问题是否可以解决,检查正则表达式r是否相当于.*.

regex string perl

8
推荐指数
1
解决办法
317
查看次数

powershell 2.0重定向文件处理异常

我正在寻找一个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)

windows powershell file-io command-line powershell-2.0

7
推荐指数
1
解决办法
8179
查看次数

如何确认NUMA?

如何确认主机是否具有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.

java linux numa

7
推荐指数
1
解决办法
6806
查看次数

Perl DBI替代LongReadLen

我想知道使用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)

linux oracle perl

6
推荐指数
1
解决办法
4408
查看次数

命令打印出大文件,排序,大小为人类可读格式

我写了一个简单的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,并且应该对输出进行排序.

linux bash

4
推荐指数
2
解决办法
4941
查看次数