11

我在 Powershell 中有以下代码

$filePath = "C:\my\programming\Powershell\output.test.txt"

try
{
    $wStream = new-object IO.FileStream $filePath, [System.IO.FileMode]::Append, [IO.FileAccess]::Write, [IO.FileShare]::Read

    $sWriter = New-Object  System.IO.StreamWriter $wStream

    $sWriter.writeLine("test")
 }

我不断收到错误:

无法转换参数“1”,其值为:“[IO.FileMode]::Append”,用于“FileStream”以键入“System.IO.FileMode”:“无法将值“[IO.FileMode]::Append”转换为由于枚举值无效,请键入“System.IO.FileMode”。请指定以下枚举值之一,然后重试。可能的枚举值为“CreateNew、Create、Open、OpenOrCreate、Truncate、Append”。

我尝试了 C# 中的等价物,

    FileStream fStream = null;
    StreamWriter stWriter = null;

    try
    {
        fStream = new FileStream(@"C:\my\programming\Powershell\output.txt", FileMode.Append, FileAccess.Write, FileShare.Read);
        stWriter = new StreamWriter(fStream);
        stWriter.WriteLine("hahha");
    }

它工作正常!

我的 powershell 脚本有什么问题?顺便说一句,我在 powershell 上运行

Major  Minor  Build  Revision
-----  -----  -----  --------
3      2      0      2237
4

4 回答 4

23

另一种方法是仅使用值的名称并让 PowerShell 将其转换为目标类型:

New-Object IO.FileStream $filePath ,'Append','Write','Read'
于 2013-01-13T06:46:25.013 回答
9

当使用New-Objectcmdlet 并且目标类型构造函数接受参数时,您应该使用-ArgumentList(New-Object 的)参数或将参数包装在括号中 - 我更喜欢用括号包装我的构造函数:

# setup some convenience variables to keep each line shorter
$path = [System.IO.Path]::Combine($Env:TEMP,"Temp.txt")
$mode = [System.IO.FileMode]::Append
$access = [System.IO.FileAccess]::Write
$sharing = [IO.FileShare]::Read

# create the FileStream and StreamWriter objects
$fs = New-Object IO.FileStream($path, $mode, $access, $sharing)
$sw = New-Object System.IO.StreamWriter($fs)

# write something and remember to call to Dispose to clean up the resources
$sw.WriteLine("Hello, PowerShell!")
$sw.Dispose()
$fs.Dispose()

新对象 cmdlet 联机帮助: http: //go.microsoft.com/fwlink/ ?LinkID=113355

于 2013-01-12T16:16:41.760 回答
4

另一种方法可能是将枚举括在括号中:

$wStream = new-object IO.FileStream $filePath, ([System.IO.FileMode]::Append), `
    ([IO.FileAccess]::Write), ([IO.FileShare]::Read)
于 2013-01-13T09:40:47.053 回答
0

如果您的目标是写入日志文件或文本文件,那么您可以尝试 PowerShell 中支持的 cmdlet 来实现这一目标吗?

Get-Help Out-File -Detailed
于 2013-01-12T16:02:10.300 回答