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


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.