পাওয়ারশেল কি ধ্রুবককে সমর্থন করে?


118

আমি পাওয়ারশেলে কিছু পূর্ণসংখ্যার ধ্রুবক ঘোষণা করতে চাই।

এটি করার কোনও ভাল উপায় আছে?

উত্তর:


121

ব্যবহার

Set-Variable test -option Constant -value 100

অথবা

Set-Variable test -option ReadOnly -value 100

"কনস্ট্যান্ট" এবং "কেবলমাত্র পঠনযোগ্য" এর মধ্যে পার্থক্য হ'ল কেবল পঠনযোগ্য ভেরিয়েবলটি মুছে ফেলা যায় (এবং তারপরে পুনরায় তৈরি করা হবে) এর মাধ্যমে

Remove-Variable test -Force

যদিও একটি ধ্রুবক পরিবর্তনশীল মুছে ফেলা যায় না (এমনকি -ফর্স দিয়েও)।

দেখুন এই TechNet নিবন্ধ আরো বিস্তারিত জানার জন্য।


4
হুম, তবে আপনি কীভাবে ডেটাটাইপ ব্যবহারের সময় জোর করবেনSet-Variable ? ভেরিয়েবলের সাথে ডিল করার সময় কেউ ব্যবহার করতে পারে [string]$name = valueতবে ধ্রুবকদের পক্ষে এটি সম্ভব হবে না বলে মনে হচ্ছে?
— মাসি

8
@masi শুধু মান জোরSet-Variable test -option Constant -value [string]100
— Monso

7
@ মনসো টাইপের নির্দিষ্টকরণের সময় মানটির চারপাশে আপনার প্রথম বন্ধনী প্রয়োজন ([string]100)। নীচে উত্তর দেখুন।
— পলিমরফিক্স

15

এই ধরণের ধ্রুবক সংজ্ঞা দেওয়ার জন্য এখানে একটি সমাধান:

const myConst = 42

Http://poshcode.org/4063 থেকে সমাধান নেওয়া হয়েছে

    function Set-Constant {
  <#
    .SYNOPSIS
        Creates constants.
    .DESCRIPTION
        This function can help you to create constants so easy as it possible.
        It works as keyword 'const' as such as in C#.
    .EXAMPLE
        PS C:\> Set-Constant a = 10
        PS C:\> $a += 13

        There is a integer constant declaration, so the second line return
        error.
    .EXAMPLE
        PS C:\> const str = "this is a constant string"

        You also can use word 'const' for constant declaration. There is a
        string constant named '$str' in this example.
    .LINK
        Set-Variable
        About_Functions_Advanced_Parameters
  #>
  [CmdletBinding()]
  param(
    [Parameter(Mandatory=$true, Position=0)]
    [string][ValidateNotNullOrEmpty()]$Name,

    [Parameter(Mandatory=$true, Position=1)]
    [char][ValidateSet("=")]$Link,

    [Parameter(Mandatory=$true, Position=2)]
    [object][ValidateNotNullOrEmpty()]$Mean,

    [Parameter(Mandatory=$false)]
    [string]$Surround = "script"
  )

  Set-Variable -n $name -val $mean -opt Constant -s $surround
}

Set-Alias const Set-Constant

1
দুর্ভাগ্যক্রমে যখন Set-Constantকোনও মডিউল অন্তর্ভুক্ত থাকে তখন এটি কাজ করে না । এটি মডিউল স্কোপটিতে একটি ধ্রুবক তৈরি করবে, যেখানে Set-Constantএটি রয়েছে। কর্মপরিকল্পনা হিসাবে কেউ প্যারামিটারটি পাস করতে পারে -Surround Globalতবে এটি সর্বদা চাইত না। আমি অন্য কোনও মডিউলে বা স্থানীয়ভাবে কোনও ফাংশনে একটি ধ্রুবক তৈরি করতে চাই।
— zett42

11

সেমিডলেট -option Constantদিয়ে ব্যবহার করুন Set-Variable:

Set-Variable myvar -option Constant -value 100

এখন $myvarএর ধ্রুব মান 100 এবং এটি সংশোধন করা যায় না।


1
বাহ, এটাই আড়ষ্ট। এটি করার জন্য আপনাকে সেট-ভেরিয়েবল ব্যবহার করতে হবে, তাই না?
— টম হ্যাজেল

হ্যাঁ, এটি করার অস্বাভাবিক উপায় নেই :)
— পাওলো টেডেসকো

1
আপনি সেট-ভেরিয়েবল (এসভিতে এলিয়াসড) বা গেট-ভেরিয়েবল (জিভি) ব্যবহার করে এবং এর বিকল্প বৈশিষ্ট্যের সাথে সংযোজন করেও পরিবর্তন করতে পারবেন এবং বিদ্যমান ভেরিয়েবলটি পরিবর্তন করতে পারবেন।
— x0n

হুম, তবে আপনি কীভাবে ডেটাটাইপ ব্যবহারের সময় জোর করবেন Set-Variable? ভেরিয়েবলের সাথে ডিল করার সময় কেউ ব্যবহার করতে পারে [string]$name = valueতবে ধ্রুবকদের পক্ষে এটি সম্ভব হবে না বলে মনে হচ্ছে?
— মাসি

@ ম্যাসি - এই পৃষ্ঠায় অন্য কোথাও মাইক শেপার্ডের উত্তর দেখুন। সেখান থেকে অনুলিপি এবং আটকানো, এটি:set-variable -name test -value ([int64]100) -option Constant
— ক্রিস

11

নির্দিষ্ট ধরণের মান ব্যবহার করতে, Int64 বলুন, আপনি সেট-ভেরিয়েবলের ক্ষেত্রে ব্যবহৃত মানটি স্পষ্টতই কাস্ট করতে পারেন।

এই ক্ষেত্রে:

set-variable -name test -value ([int64]100) -option Constant

পরীক্ষা করতে,

$test | gm

এবং আপনি দেখতে পাবেন যে এটি একটি ইন্টার 64 (इंट 32 এর পরিবর্তে, যা 100 মানের জন্য স্বাভাবিক হবে)।


5

রব এর উত্তর সরবরাহ করে এমন সিনট্যাকটিক চিনিটি আমি সত্যিই পছন্দ করি :

const myConst = 42

দুর্ভাগ্যক্রমে তার সমাধান আপনি যখন মডিউলটিতেSet-Constant ফাংশনটি সংজ্ঞায়িত করেন তখন প্রত্যাশা মতো কাজ করে না । যখন মডিউল বাইরে থেকে বলা হয়, এটা মডিউল সুযোগ যেখানে একটি ধ্রুবক তৈরি করবে পরিবর্তে সংজ্ঞায়িত করা হয় আহ্বানকারী এর সুযোগ । এটি কলারের কাছে ধ্রুবককে অদৃশ্য করে তোলে।Set-Constant

নিম্নলিখিত সংশোধিত ফাংশনটি এই সমস্যার সমাধান করে। সমাধান উপর ভিত্তি করে তৈরি এই উত্তরটি প্রশ্নের "একটি PowerShell মডিউল তার আহ্বানকারী এর সুযোগ এ পেতে জন্য কোন উপায় আছে কি?" ।

function Set-Constant {
    <#
    .SYNOPSIS
        Creates constants.
    .DESCRIPTION
        This function can help you to create constants so easy as it possible.
        It works as keyword 'const' as such as in C#.
    .EXAMPLE
        PS C:\> Set-Constant a = 10
        PS C:\> $a += 13

        There is a integer constant declaration, so the second line return
        error.
    .EXAMPLE
        PS C:\> const str = "this is a constant string"

        You also can use word 'const' for constant declaration. There is a
        string constant named '$str' in this example.
    .LINK
        Set-Variable
        About_Functions_Advanced_Parameters
    #>
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true, Position=0)] [string] [ValidateNotNullOrEmpty()] $Name,
        [Parameter(Mandatory=$true, Position=1)] [char] [ValidateSet("=")] $Link,
        [Parameter(Mandatory=$true, Position=2)] [object] [ValidateNotNullOrEmpty()] $Value
    )

    $var = New-Object System.Management.Automation.PSVariable -ArgumentList @(
        $Name, $Value, [System.Management.Automation.ScopedItemOptions]::Constant
    )

    $PSCmdlet.SessionState.PSVariable.Set( $var )
}

Set-Alias const Set-Constant

মন্তব্য:

  • ফাংশনটি কেবল তখনই কাজ করে, যখন মডিউলটির বাইরে থেকে ডাকা হয় , যেখানে এটি সংজ্ঞায়িত হয়। এটি ইচ্ছাকৃত ব্যবহারের কেস, তবে আমি Set-Variable -scope 1কীভাবে কীভাবে এটি করতে হবে তা জানতে পেরে একই মডিউল থেকে (যা ক্ষেত্রে কাজ করা উচিত) ফোন করা হয়েছিল কিনা তা আমি চেক যুক্ত করতে চাই ।
  • আমি প্যারামিটার নতুন নামকরণ করে থাকেন -Meanকরার -Valueসাথে সঙ্গতির জন্য, Set-Variable।
  • ফাংশন ঐচ্ছিকরূপে সেট করতে বাড়ানো হতে পারে Private, ReadOnlyএবং AllScopeপতাকা। কেবলমাত্র PSVariableনির্মাণকারীর তৃতীয় যুক্তিতে পছন্দসই মানগুলি যুক্ত করুন , যা উপরের স্ক্রিপ্টের মাধ্যমে বলা হয় New-Object।

-4

পাওয়ারশেল ভি 5.0 এর অনুমতি দেওয়া উচিত

[স্থিতিশীল] [অন্তর্] $ পরিবর্তনশীল = 42

[স্থির] [তারিখের সময়] $ আজকের দিন

এবং পছন্দ.


2
PS 5.1 এ কাজ করে না। প্রকার [স্থির] খুঁজে পেতে অক্ষম।
— থমাস এমএক্স

5
উল্লেখ করার মতো নয়, স্থির হিসাবে ধ্রুবক হিসাবে একই নয়
— কলব ক্যানিয়ন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.