26.03.2023

Powershell'in dahili fonksiyonları

Powershell'de New-Item cmdlet'ini yeni dosya oluşturmak veya yeni klasör oluşturmak için kullanabiliriz. Bu farkı belirtmek için -ItemType var. Dökümantasyona göre varsayılan bir değeri yok:


Ama garip bir şekilde özellikle belirtmezsek dosya sistemi modunda "dosya" oluşturuyor. Bu varsayılan değer demek değil mi?

Neyse, bu cmdlet'in "ni" alias'ı da var. Gerek tam cmdlet adı, gerek alias'ı ni ile klasör oluşturmak için -ItemType'a Directory değerini vermek yeterli. Hatta ItemType parametresinin yukarıdaki resimde görüldüğü gibi Type alias'ı da var.

PS> New-Item -ItemType Directory -Name YeniKlasor

PS> ni -type directory YeniKlasor

Ama ilginç bir şekilde mkdir veya md komutları da Powershell'de çalışıyor. Önceleri bunları New-Item alias'ları olduğunu sanmıştım ama öyle değilmiş (olsaydı alias için varsayılan parametre değeri nasıl değiltirilir, merak ederdim). Get-Command ile baktığımda şöyle bir sonuç aldım:

PS> Get-Command mkdir

CommandType     Name                      Version    Source
-----------     ----                      -------    ------
Function        mkdir

Meğer mkdir bir Powershell dahili (built-in) komutuymuş. md ise mkdir için bir alias'mış. Diğer dahili komutlar şunlar:

cd..
cd\
ImportSystemModules
pause
help
prompt
Clear-Host
TabExpansion2
Get-Verb
oss

Bunların hepsi için Get-Command ile baktığımızda CommandType sütununda Function yazıyor. Örneğin Write-Host'a Get-Command ile baktığımızda ise CommanType'ı Cmdlet ve Source sütununda modül adı ve Version sütununda da sürüm numarası yazar. Ama Get-Help mkdir'a baktığımda gözüken yardım girdisi, New-Item'in.

PS> Get-Help mkdir

NAME
    New-Item

SYNOPSIS
    Creates a new item.

SYNTAX
    New-Item [[-Path] <System.String[]>] [-Credential <System.Management.Automation.PSCredential>] [-Force] [-ItemType
    <System.String>]
-Name <System.String> [-UseTransaction] [-Value <System.Object>] [-Confirm] [-WhatIf] [<CommonPara
    meters>]

    New-Item [[-Path] <System.String[]>] [-Credential <System.Management.Automation.PSCredential>] [-Force] [-ItemType
    <System.String>]
[-UseTransaction] [-Value <System.Object>] [-Confirm] [-WhatIf] [<CommonParameters>]

Her ne kadar bu yardım girdisinde -ItemType parametresi verilmiş olsa da mkdir ile -ItemType'ı kullanmak aşağıdaki gibi bir hataya sebep oluyor:

PS> mkdir -ItemType file -Name qwer
mkdir : A parameter cannot be found that matches parameter name 'ItemType'.
At line:1 char:7
+ mkdir -ItemType file -Name qwer
+       ~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [mkdir], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,mkdir

Bu arada help'in de bir alias değil de bir dahili komut olması da ilginç.

Hiç yorum yok: