پاورشل برای برنامهنویسان
@programming_tipsدرسنامه: کار با کلاسهای .NET در پاورشل
پاورشل خودش روی داتنت ساخته شده، بنابراین میتونه مستقیماً با تمام کلاسها، متدها و ویژگیهای .NET کار کنه یعنی تقریبا به همهی امکانات سیستمعامل، فایلها، شبکه، رمزنگاری و حتی گرافیک دسترسی داری.
۱. پاورشل و داتنت: رابطهی مستقیم
پاورشل در اصل یه پوستهی شیگراست که روی .NET Framework (در ویندوز) یا .NET Core (در PowerShell Core) اجرا میشه.
به همین دلیل هر چیزی که در .NET وجود داره، در PowerShell هم قابل استفادهست.
میتونی اشیاء جدید از کلاسهای داتنت بسازی، متدهاشون رو صدا بزنی و دادههاشون رو تغییر بدی.
۲. ایجاد شی از کلاسهای .NET
برای ساخت شی از یک کلاس داتنت، از دستور New-Object یا [ClassName]::new() استفاده میکنیم.
مثال ۱: ساخت شی از System.DateTime
$today = New-Object System.DateTime(2025, 10, 15) Write-Output $today
یا روش کوتاهتر:
$today = [DateTime]::new(2025, 10, 15)
کلاس System.DateTime یکی از پرکاربردترین کلاسهای داتنت است و با آن میتوان زمان و تاریخ را مدیریت کرد.
۳. استفاده از متدهای Static
در داتنت، بعضی متدها نیاز به ساخت شی ندارند، چون Static هستند.
برای فراخوانی متدهای استاتیک از علامت :: استفاده میکنیم.
مثال ۲: گرفتن تاریخ فعلی
[DateTime]::Now
مثال ۳: تبدیل رشته به عدد
[int]::Parse("123")
در اینجا بدون نیاز به ساخت شی جدید، متد Parse مستقیماً از کلاس System.Int32 (معادل [int]) استفاده میکند.
۴. کار با فایلها و پوشهها از طریق .NET
اگرچه PowerShell Cmdletهایی مثل Get-ChildItem یا New-Item دارد، ولی با داتنت کنترل بیشتری خواهی داشت.
مثال:
[System.IO.File]::WriteAllText("test.txt", "Hello Ali!")
$content = [System.IO.File]::ReadAllText("test.txt")
Write-Output $content
با استفاده از کلاس System.IO.File فایل جدید میسازی، در آن مینویسی، و دوباره محتوایش را میخوانی.
۵. استفاده از متدهای شیئی
بعضی از کلاسها فقط استاتیک نیستند و میتونی شی ازشون بسازی و با متدهاشون کار کنی.
مثال:
$stringBuilder = New-Object System.Text.StringBuilder
$stringBuilder.Append("Hello")
$stringBuilder.Append(" World!")
$stringBuilder.ToString()
اینجا از StringBuilder استفاده کردیم تا رشتهها رو بهینهتر ترکیب کنیم — دقیقاً مثل کاری که در برنامهنویسی C# انجام میدیم.
۶. ترکیب Cmdletها با کلاسهای داتنت
قدرت واقعی PowerShell وقتی دیده میشه که Cmdletها و .NET رو با هم ترکیب کنی.
مثال:
$files = Get-ChildItem -Path "C:\Logs"
foreach ($file in $files) {
$size = [Math]::Round($file.Length / 1MB, 2)
Write-Output "$($file.Name) — $size MB"
}
در اینجا از Get-ChildItem برای گرفتن فایلها و از کلاس [Math] برای محاسبه اندازهها استفاده کردیم.
۷. ایجاد اشیاء سفارشی از کلاسهای خودت
میتونی هر کلاسی از داتنت رو استفاده و شخصیسازی کنی. مثلاً برای کار با HTTP:
$client = New-Object System.Net.WebClient
$content = $client.DownloadString("https://example.com")
Write-Output $content
یا حتی کار با مسیرها:
[System.IO.Path]::GetExtension("C:\test\file.txt")
۸. کار با Assemblies خارجی
اگه بخوای از کتابخانههای خارجی استفاده کنی، میتونی Assembly جدید بارگذاری کنی:
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show("Hello Ali!")
در این مثال، یه پنجرهی پیام ساده باز میشه!
با همین روش میشه از کلاسهای GUI، شبکه، گرافیک و رمزنگاری استفاده کرد.
۹. نکات حرفهای
- برای دیدن متدها و Propertyهای هر کلاس:
[System.IO.File] | Get-Member -Static
- برای اشیاء ساختهشده:
$obj = New-Object System.DateTime $obj | Get-Member
- همیشه نام کلاسها را با namespace کامل بنویس، مگر اینکه در PowerShell type alias موجود باشد (مثل
[int],[string],[math]). - هر چیزی در PowerShell که میبینی (حتی خروجی
Get-Process) در واقع یک شی از یک کلاس .NET است.
۱۰. تمرین پیشنهادی ✨
- با استفاده از
[System.IO.File]فایل بساز، متن داخلش بنویس و بخونش. - با
[DateTime]فاصله بین امروز و یک تاریخ خاص را حساب کن. - از
[System.Net.WebClient]برای دانلود محتوای یک صفحهی وب استفاده کن. - با
Add-Type -AssemblyName System.Windows.Formsیک پیام گرافیکی بساز.
با یادگیری استفاده از کلاسهای داتنت، PowerShell از یه ابزار خط فرمان ساده به یه زبان برنامهنویسی تمامعیار تبدیل میشه.