小编goo*_*oly的帖子

PowerShell Round和Format Float最多2位小数?

我发现很多东西可以将浮点数格式化为常见的已知数字,但是如何将浮点数格式化为最多2位小数,但仅当需要小数时?

例子:

  1.11 # not 1.111
  1.12 # it was 1.116 (round up)
  1.1  # not 1.10
  1    # not 1.00
Run Code Online (Sandbox Code Playgroud)

如果我做

  $('{0:N2}' -f $flt)
Run Code Online (Sandbox Code Playgroud)

我明白了

  1.00 # :(
Run Code Online (Sandbox Code Playgroud)

提前致谢!

format floating-point powershell

13
推荐指数
2
解决办法
3万
查看次数

PowerShell全局变量局部变量

我有全局变量,并希望在函数中使用它们.

我不在函数中使用同名的局部变量!

# Global variables:
$Var1 = @{ .. }
$Var2 = @( .. )
function testing{
    $Var1.keyX = "kjhkjh"
    $Var2[2]   = 6.89768
}
Run Code Online (Sandbox Code Playgroud)

我这样做并且它有效,但是它是安全的还是我必须使用:

$Global:Var1.keyX = "kjhkjh"
Run Code Online (Sandbox Code Playgroud)

谢谢,Gooly

powershell global-variables

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

PowerShell哈希表双键错误:"a"和"A"

从另一个应用程序我有我想在我的脚本中使用的键值对.
但是他们有例如键"a"和"A" - 这导致错误双键不被允许.

  $x = @{ "a" = "Entry for a"; "A" = "S.th.else for A" }
Run Code Online (Sandbox Code Playgroud)

我能做什么,因为我需要两者或不需要?

先谢谢,
Gooly

powershell hashtable

5
推荐指数
1
解决办法
977
查看次数

PowerShell命名管道:没有连接?

我需要一个命名管道来读写.

在程序中,我使用kernel32.dll创建管道服务器:

string PipeName = "\\\\.\\pipe\\myMT4"; 
int PipeMode = PIPE_TYPE_MESSAGE|PIPE_READMODE_MESSAGE|PIPE_WAIT; # tried too: PIPE_NOWAIT
int hPipe = CreateNamedPipeW(
            PipeName,
            PIPE_ACCESS_DUPLEX,
            PipeMode,
            PIPE_UNLIMITED_INSTANCES,1024,1024,
            NMPWAIT_USE_DEFAULT_WAIT,NULL);
Run Code Online (Sandbox Code Playgroud)

句柄hPipe是有效的 - 这里的每件事似乎都可以!

但在PowerShell脚本中,我想打开一个客户端,连接并打开编写器 -
并且无法连接=>超时

function connect{
    Param ([PSObject] $h)
    ...
    $h.Pipe = New-Object -TypeName System.IO.Pipes.NamedPipeClientStream "\\.\pipe\PipeTest"
    $h.Pipe.Connect( 5000 )
    $h.Writer = New-Object -TypeName System.IO.StreamWriter $h.Pipe, $h.Encode 
Run Code Online (Sandbox Code Playgroud)


从/向管道和套接字读取和写入时,我真的更喜欢这种方式具有类似的访问权限,例如:

function write{
    Param ([PSObject] $h, [string] $line )
  try {
        $h.Writer.Write($line) 
    }       
Run Code Online (Sandbox Code Playgroud)

怎么了?先谢谢,Gooly.

PS:似乎该程序无法处理管道服务器 - 我必须打开管道客户端,这可以工作,但这会导致其他问题:

我为PowerShell-pipe-server定义:

 $pipeName = "testpipe"
 $pipeDir  = [System.IO.Pipes.PipeDirection]::InOut
 $pipeMsg  = …
Run Code Online (Sandbox Code Playgroud)

powershell named-pipes

3
推荐指数
1
解决办法
5120
查看次数

PowerShell获取内容:尝试{..} catch {..}?

我做到了

try {
    $g = Get-Content $file
} catch { 
    return ""
}
Run Code Online (Sandbox Code Playgroud)

但是,只要另一个进程仍然写入$ file(并阻止它),我会收到一条错误消息:无法访问该文件为...

我为什么不在catch {}中"登陆"但是收到错误 - 如何检查文件是否可访问?

提前谢谢,Golly

得到它了 :)

我只是用:

 try {
     $g = New-Object system.IO.StreamReader $file
 } catch { 
     return ""
 }
Run Code Online (Sandbox Code Playgroud)

如果文件仍然被写入,它将重定向到catch-branch

powershell file

3
推荐指数
1
解决办法
5037
查看次数

为什么使用Replace函数从PowerShell中的多行字符串中删除空行失败?

我正在加载HTML电子邮件,首先我删除了HTML标签,我将每个 空格替换为空格,并将双空格减少一个空格 - 这是有效的.

但是现在我有很多空行,我无法删除.我已经看到了在读取文件时删除空行的示例,但在删除HTML标记和空格之前,我没有任何空行.

我做:

$m = [IO.File]::ReadAllText("$emailFolder\$fName")
$m = $m -replace "<((?!@).)*?>" # removes all html tag but not adr: <John.Doe@Doe.com>
$m = $m -replace "&nbsp;"," "
$m = $m.Replace('  ',' ').Replace('  ',' ').Replace('  ',' ')
$m = $m.Replace('`r','').Replace('`n`n','`n').Replace('`n`n','`n') # does nothing :(
Run Code Online (Sandbox Code Playgroud)

我尝试了各种版本,没有一个删除空行.任何想法,我怎么能做到这一点?

除此之外,我试图使用正则表达式乘数来连续查找空格并失败.

我做错了什么?

$m = $m.Replace(' +',' ')  # does not work
$m = $m.Replace('\s+',' ') # does not work either
Run Code Online (Sandbox Code Playgroud)

regex powershell replace

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

我可以按整个单词或仅按单个字符拆分字符串吗?

我需要通过以下方式分割更长的字符串(整个 XML 文件)</event>使每个事件都位于创建的列表的一个元素中。

如果我以一种天真的方式这样做:

$evList = $txtAll.Split("</event>")
Run Code Online (Sandbox Code Playgroud)

我得到的是垃圾。所以我最终这样做了:

$evList = $txtAll.replace("</event>","|").Split("|")
Run Code Online (Sandbox Code Playgroud)

替换</event>|,然后在 处拆分|

偶尔这个(或其他)奇怪的角色出现,我就会再次陷入混乱。

有没有办法直接用 分割长字符串</event>?如何?

string split powershell-2.0

3
推荐指数
1
解决办法
3725
查看次数

函数的必需参数和默认参数

我已经为特殊目的编写了一个小的PowerShell send-email-function(错误消息),以便from和to地址始终相同!

  Function Send-EMail {
      Param (
          [Parameter(Mandatory=$true)]  [String]$EmailTo   = "ToAddr@gmx.at", # default
          [Parameter(Mandatory=$true)]  [String]$EmailFrom = "FromAddr@gmail.com", #default
          [Parameter(Mandatory=$true)]  [String]$Subject,
          [Parameter(Mandatory=$true)]  [String]$Body,
          [Parameter(mandatory=$false)] [String]$Attachment,
          [Parameter(mandatory=$true)]  [String]$Password
      )
          $SMTPServer = "smtp.gmail.com"
          $SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body)
          if ($attachment -ne $null) {
              $SMTPattachment = New-Object System.Net.Mail.Attachment($attachment)
              $SMTPMessage.Attachments.Add($STMPattachment)
          }
          $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
          $SMTPClient.EnableSsl = $true
          $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($EmailFrom.Split("@")[0], $Password);
          $SMTPClient.Send($SMTPMessage)
          Remove-Variable -Name SMTPMessage
          Remove-Variable -Name SMTPClient
          Remove-Variable -Name Password
          Remove-Variable -Name Body
          Remove-Variable -Name Subject

  } #End Function Send-EMail
  ....
  $subj …
Run Code Online (Sandbox Code Playgroud)

parameters powershell function

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

我可以将函数分配给变量吗?

我不能将函数分配给变量是否正确 - 例如:

     $h = {ID="x1";readStream=$Null;... }
     ...
     $h.readStream = function{ ... }
Run Code Online (Sandbox Code Playgroud)

谢谢!

PS @A.Wiechers:对我来说,如果所有标题都在第一次输入问题所在的prg.-langague,那将会有很大帮助!对于这个问题,我必须只打开针提示,如果例如“我可以将一个函数分配给一个变量以便在另一个函数中使用吗?1”将以“Python”开头 - 标签的条目确实可以跳过这些提示不要过滤 StackExchange 建议!这甚至有助于防止仅仅因为标题相似而出现重复条目​​!

powershell

2
推荐指数
1
解决办法
3691
查看次数