اكتب إلى الملفات باستخدام PowerShell Set-Content: دليل شامل

قم بتشغيل-المحتوى هو واحد من تلك الأوامر الأساسية في PowerShell التي لا أستطيع الاستغناء عنها. لا أزال أتذكر استخدام VBscript قبل أن نتمكن من استخدام PowerShell للكتابة إلى ملف. أتذكر دائمًا محاولة تذكر نوع الكائن الذي كنت بحاجة لاستخدامه واسم الطريقة. هل كان FileSystemObject ، FileObject أم ماذا؟ كانت معضلة! حتى عندما كنت أتذكر اسم الطريقة كان CreateTextFile () ، كنت دائمًا أنسى إضافة True كالمعامل الثاني.

إليك مثال على الوحشية التي أتحدث عنها.

Set objFSO=CreateObject("Scripting.FileSystemObject")
outFile="c:\file.txt"
Set objFile = objFSO.CreateTextFile(outFile,True)
objFile.Write "test string"
objFile.Close

قارن تلك الـ VBScript بهذا الـ PowerShell:

Set-Content -Path 'C:\file.txt' -Value 'test string'

أيهما تفضل؟ سأختار طريقة PowerShell! طريقة PowerShell تستخدم cmdlet واحدة تُسمى Set-content. هذا الـ cmdlet يسمح لنا باستخدام PowerShell بسهولة أكبر للكتابة إلى ملف. هذا الـ cmdlet في PowerShell هو cmdlet مدمج يتمتع بغرض واحد؛ الكتابة إلى ملف.

قد تحتوي بعض المعاملات هنا وهناك على تغيير تلك السلوك قليلاً، لكنها مركزة تمامًا على الكتابة إلى ملف. لا تخلط بينه وبين Add-Content على الرغم من أنهما متشابهان. Set-Content يقوم بتجاوز الملف بأكمله بينما Add-Content يضيف إلى ملف. تعلمت ذلك بالطريقة الصعبة عدة مرات عندما بدأت للمرة الأولى!

إنشاء ملف/تجاوز ملف

الـ cmdlet Set-Content بسيط نسبيًا. فيما يلي مثال جيد. يوضح هذا المثال أن Set-Content يمكنه إنشاء ملف إذا لم يكن موجودًا أو يمكنه استبدال جميع المحتويات داخل ملف موجود مسبقًا.

PS> Test-Path -Path C:\test.txt
False
PS> Set-Content -Path C:\test.txt -Value 'foo'
PS> Get-Content -Path C:\test.txt
foo
PS> Set-Content -Path C:\test.txt -Value 'bar'
PS> Get-Content -Path C:\test.txt
bar

إخراج إلى ملف

واحدة من الـ cmdlets التي يمكن أن تخرج إلى ملف هي Out-File، ولكن Set-Content يمكن أن تؤدي نفس المهمة على الرغم من القيام بذلك بشكل مختلف قليلاً.

ربما ترغب في سحب قطع محددة من نص ما من ملف نصي وإخراج الأسطر إلى ملف آخر. باستخدام Get-Content و Set-Content، يمكنك تحقيق هذا الهدف. ربما لدي ملف نصي يحتوي على اسم الخادم وحالته لكل سطر. أود قراءة حالة كل خادم وإخراج ذلك إلى ملف. باستخدام Get-Content لقراءة الملف و Set-Content للكتابة في الملف، يمكن ذلك.

PS> Get-Content -Path C:\test.txt
SRV1 Status: Up
SRV2 Status: Down
SRV3 Status: Up
PS> Get-Content -Path C:\test.txt | ForEach-Object {
>>> $srvName = $_.Split(' ')[0]
>>> Set-Content -Path "C:\$srvName.txt" -Value $_
}
PS> Get-ChildItem -Filter 'SRV*'
Directory: C:\
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       10/29/2017  12:38 PM             17 SRV1.txt
-a----       10/29/2017  12:38 PM             19 SRv2.txt
-a----       10/29/2017  12:38 PM             17 SRV3.txt

PS> Get-ChildItem -Filter 'SRV*' | Get-Content
SRV1 Status: Up
SRV2 Status: Down
SRV3 Status: Up

Set-Content هو واحد من تلك الأوامر الأساسية التي يتم استخدامها باستمرار. ليس متطورًا ولكنه يعمل في كل مرة وهو واحد يجب أن يكون لديك في حقيبة أدوات PowerShell الخاصة بك.

للحصول على شرح كامل، تفقد الـ Set-Content وثائق Microsoft.

Source:
https://adamtheautomator.com/powershell-write-to-file/