首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过streamwriter向.csv文件写入信息

如何通过streamwriter向.csv文件写入信息
EN

Stack Overflow用户
提问于 2019-09-05 23:35:38
回答 1查看 105关注 0票数 1

我正在尝试使用powershell脚本将大量信息写入.csv文件。我从SCCM配置管理器中的"Run Script“功能在1500台计算机上运行此脚本。该脚本在所有机器上运行,但并非所有机器都在文件中写入了有关它们的信息。在1352台机器中,只有375台写入了文件。我怀疑程序要么运行得太快,无法在下一台机器运行脚本之前打开和关闭文件,也无法写入文件,因为它仍然是打开的。有什么办法可以解决这个问题吗?我看过关于使用StreamWriter的帖子,但不确定这是否能解决我的问题。

我试过将计算机分成更小的组,比如一次8个,但其中只有5个将信息写入文件。代码如下所示,可以正常工作。

代码语言:javascript
运行
复制
#Overrides GPO execution policy
Set-ExecutionPolicy Bypass


#Gets and writes computer name to .csv file
$env:COMPUTERNAME = HostName

#Checks the path to see if a particular file is present
$DeplPath = "AppData\LocalLow\Sun\Java\Deployment\deployment.properties"


#Checks each user profile on machine for the deployment.properties file and writes to .csv "True" if present and "False" if it isn't
$javausers = foreach ($User in Get-ChildItem C:\Users -Directory){
    $folder = Join-Path $User.FullName $DeplPath
    if (Test-Path $folder) {
        $TestResult = "True  - deployment.properties"
    } Else {
        $TestResult = "False - Path not found"
    }
    [PSCustomObject]@{
        "Computer Name" = $env:COMPUTERNAME 
        "Java User True/False"       = $TestResult
        "Users"         = $user.Name
        #"Last Write Time" = $file.LastWriteTime = (Get-Date)

    }
}

#This is used for on-screen display only
#$javausers

#Tests path accessibility and writes an error file to the local machine if the path can't be found
try
{
$javausers | Export-Csv -NoTypeInformation -Path "\\anyserver\Java_User_Reports\testjava.csv" -Append

}
catch
{
$_| Out-File "c:\Temp\java_error.txt"

}

我想让脚本搜索有关每个用户的信息写入1500台机器中的每台机器的文件中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-09 22:22:25

我找到了一个更简单的解决方案,只需在文件名中添加一个Get-Date选项,这样就可以同时提取毫秒数,确保每次都会创建一个新文件,并且不会覆盖先前的文件。这在几分钟内创建了1365个文件。我将输出行更改为以下内容:

代码语言:javascript
运行
复制
$dateTime | Export-Csv -NoTypeInformation -Path "\\anyserver\Java_User_Reports\$env:COMPUTERNAME-javausers-$(Get-Date -Format "yyyyMMddHHmmssff").csv" -Append

然后,我将文件复制到我机器上的本地文件夹,打开命令提示符,输入命令以更改文件所在的目录路径。然后我输入命令来查看文件夹中的文件,并确保所有我想要的文件都在那里。最后,我键入copy *.csv newfilenamehere.csv,以便将所有信息放在一个文件中。结果正是我需要的,并解决了从多台计算机获取信息的问题,而无需脚本保持文件打开,也不允许向其中写入其他信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57808813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档