আমি পাওয়ারশেলে কিছু পূর্ণসংখ্যার ধ্রুবক ঘোষণা করতে চাই।
এটি করার কোনও ভাল উপায় আছে?
আমি পাওয়ারশেলে কিছু পূর্ণসংখ্যার ধ্রুবক ঘোষণা করতে চাই।
এটি করার কোনও ভাল উপায় আছে?
উত্তর:
ব্যবহার
Set-Variable test -option Constant -value 100
অথবা
Set-Variable test -option ReadOnly -value 100
"কনস্ট্যান্ট" এবং "কেবলমাত্র পঠনযোগ্য" এর মধ্যে পার্থক্য হ'ল কেবল পঠনযোগ্য ভেরিয়েবলটি মুছে ফেলা যায় (এবং তারপরে পুনরায় তৈরি করা হবে) এর মাধ্যমে
Remove-Variable test -Force
যদিও একটি ধ্রুবক পরিবর্তনশীল মুছে ফেলা যায় না (এমনকি -ফর্স দিয়েও)।
দেখুন এই TechNet নিবন্ধ আরো বিস্তারিত জানার জন্য।
Set-Variable test -option Constant -value [string]100
([string]100)
। নীচে উত্তর দেখুন।
এই ধরণের ধ্রুবক সংজ্ঞা দেওয়ার জন্য এখানে একটি সমাধান:
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
Set-Constant
কোনও মডিউল অন্তর্ভুক্ত থাকে তখন এটি কাজ করে না । এটি মডিউল স্কোপটিতে একটি ধ্রুবক তৈরি করবে, যেখানে Set-Constant
এটি রয়েছে। কর্মপরিকল্পনা হিসাবে কেউ প্যারামিটারটি পাস করতে পারে -Surround Global
তবে এটি সর্বদা চাইত না। আমি অন্য কোনও মডিউলে বা স্থানীয়ভাবে কোনও ফাংশনে একটি ধ্রুবক তৈরি করতে চাই।
সেমিডলেট -option Constant
দিয়ে ব্যবহার করুন Set-Variable
:
Set-Variable myvar -option Constant -value 100
এখন $myvar
এর ধ্রুব মান 100 এবং এটি সংশোধন করা যায় না।
Set-Variable
? ভেরিয়েবলের সাথে ডিল করার সময় কেউ ব্যবহার করতে পারে [string]$name = value
তবে ধ্রুবকদের পক্ষে এটি সম্ভব হবে না বলে মনে হচ্ছে?
set-variable -name test -value ([int64]100) -option Constant
নির্দিষ্ট ধরণের মান ব্যবহার করতে, Int64 বলুন, আপনি সেট-ভেরিয়েবলের ক্ষেত্রে ব্যবহৃত মানটি স্পষ্টতই কাস্ট করতে পারেন।
এই ক্ষেত্রে:
set-variable -name test -value ([int64]100) -option Constant
পরীক্ষা করতে,
$test | gm
এবং আপনি দেখতে পাবেন যে এটি একটি ইন্টার 64 (इंट 32 এর পরিবর্তে, যা 100 মানের জন্য স্বাভাবিক হবে)।
রব এর উত্তর সরবরাহ করে এমন সিনট্যাকটিক চিনিটি আমি সত্যিই পছন্দ করি :
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
।পাওয়ারশেল ভি 5.0 এর অনুমতি দেওয়া উচিত
[স্থিতিশীল] [অন্তর্] $ পরিবর্তনশীল = 42
[স্থির] [তারিখের সময়] $ আজকের দিন
এবং পছন্দ.
Set-Variable
? ভেরিয়েবলের সাথে ডিল করার সময় কেউ ব্যবহার করতে পারে[string]$name = value
তবে ধ্রুবকদের পক্ষে এটি সম্ভব হবে না বলে মনে হচ্ছে?