我发现很多东西可以将浮点数格式化为常见的已知数字,但是如何将浮点数格式化为最多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)
提前致谢!
我有全局变量,并希望在函数中使用它们.
我不在函数中使用同名的局部变量!
# 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
从另一个应用程序我有我想在我的脚本中使用的键值对.
但是他们有例如键"a"和"A" - 这导致错误双键不被允许.
$x = @{ "a" = "Entry for a"; "A" = "S.th.else for A" }
Run Code Online (Sandbox Code Playgroud)
我能做什么,因为我需要两者或不需要?
先谢谢,
Gooly
我需要一个命名管道来读写.
在程序中,我使用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) 我做到了
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
我正在加载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 " "," "
$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) 我需要通过以下方式分割更长的字符串(整个 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>?如何?
我已经为特殊目的编写了一个小的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) 我不能将函数分配给变量是否正确 - 例如:
$h = {ID="x1";readStream=$Null;... }
...
$h.readStream = function{ ... }
Run Code Online (Sandbox Code Playgroud)
谢谢!
PS @A.Wiechers:对我来说,如果所有标题都在第一次输入问题所在的prg.-langague,那将会有很大帮助!对于这个问题,我必须只打开针提示,如果例如“我可以将一个函数分配给一个变量以便在另一个函数中使用吗?1”将以“Python”开头 - 标签的条目确实可以跳过这些提示不要过滤 StackExchange 建议!这甚至有助于防止仅仅因为标题相似而出现重复条目!
powershell ×8
file ×1
format ×1
function ×1
hashtable ×1
named-pipes ×1
parameters ×1
regex ×1
replace ×1
split ×1
string ×1